Как загрузить данные JSON в Django и создать модель

#python #json #django #django-rest-framework #backend

#python #json #django #django-rest-framework #серверная часть

Вопрос:

Я пытаюсь загрузить файл данных json и создать класс Player с заданным файлом данных json. Я просмотрел документацию на веб-сайте Django и некоторые сообщения о переполнении стека, но не смог понять, как это сделать. Когда я попытался создать метод класса create() на models.py , я продолжал получать сообщение об ошибке no table exists. Кто-нибудь может помочь мне разобраться?? заранее благодарю

Для моделей.py У меня есть класс player

     class Player(models.Model):

    pos = models.CharField(max_length=2, default="")
    name = models.CharField(max_length=30, default="")

    age = models.PositiveIntegerField()
    posRank = models.PositiveIntegerField()

    throwAtt = models.PositiveIntegerField()
    throwYd = models.PositiveIntegerField()
    throwTD = models.PositiveIntegerField()
    interception = models.PositiveIntegerField()

    rushAtt = models.PositiveIntegerField()
    rushYd = models.PositiveIntegerField()
    rushTD = models.PositiveIntegerField()
    rushAvgYd = models.FloatField()

    target = models.PositiveIntegerField()
    rec = models.PositiveIntegerField()
    recYd = models.PositiveIntegerField()
    recAvgYd = models.FloatField()
    recTD = models.PositiveIntegerField()
    totalTD = models.PositiveIntegerField()

    fumble = models.PositiveIntegerField()
    fpts = models.FloatField(null=True)
    ppr = models.FloatField()
    totGames = models.PositiveIntegerField()
 

и для serializers.py
У меня есть сериализатор плеера, написанный как показано ниже

     class PlayerSerializer(serializers.ModelSerializer):
    class Meta:

        model = Player
        fields = ('name', 'pos', 'age', 'posRank', 'throwAtt', 'throwYds', 'throwTD',
                  'interception', 'rushAtt', 'rushYd', 'rushTD', 'rushAvgYd', 'target',
                  'rec', 'recYd', 'recAvgYd', 'recTD' 'totalTD', 'fumble', 'fpts', 'ppr', 'totGames')


and inside views.py i have this class

class PlayerView(generics.CreateAPIView):
    players = Player.objects.all()
    serializer = PlayerSerializer(players, many=True)

    def get(self, request):
        output = json.load('api/NewNFLdata.json')
        for player in output:
            newPlayer = Player(pos=player["FantPos"],
                               name=player["Player"],
                               age=player["Age"],
                               posRank=player["PosRank"],
                               throwAtt=player["Att"],
                               throwYd=player["Yds"],
                               throwTD=player["TD"],
                               interception=player["Int"],
                               rushAtt=player["Att.1"],
                               rushYd=player["Yds.1"],
                               rushTD=player["TD.1"],
                               rushAvgYd=player["Y/A"],
                               target=player["Tgt"],
                               rec=player["Rec"],
                               recYd=player["Yds.2"],
                               recAvgYd=player["Y/R"],
                               recTD=player["TD.2"],
                               totalTD=player["TD.3"],
                               fumble=player["Fmb"],
                               fpts=player["FantPt"],
                               ppr=player["PPR"],
                               totGames=player["G"]
                               )
            newPlayer.save()
        return Response(serializer.data)
 

Я попытался сделать это самостоятельно, просмотрев stack overflow
, но не смог найти способ загрузить данные json в модель

Комментарии:

1. Они называются fixtures, вам не нужно реализовывать их с нуля, ищите Django документацию для Fixure

2. Когда я пытаюсь загрузить приспособление, должен ли я иметь то же значение ключа, что и поля, определенные в классе serializer?

3. Вы хотите загружать данные json только один раз или вам нужно импортировать функциональность в ваше приложение, чтобы пользователи могли загружать данные путем импорта файлов json?

4. @JaewooCho видишь это

5. Приспособления имеют фиксированную структуру, изучите ее, затем примените, и ваш ответ — нет, приспособления связаны с моделью, а не с сериализатором (django, а не DRF)

Ответ №1:

Взгляните на приспособления: https://docs.djangoproject.com/en/3.1/howto/initial-data /

Если вы сможете настроить свои файлы JSON в соответствующем формате, вы получите преимущества процесса загрузки fixtures в Django, который включает проверку полей, которую вам не нужно будет писать. Удачи!

Комментарии:

1. Да, я тоже смотрел на это. Я попытался загрузить данные, но, похоже, по какой-то причине это не работает..

2. Должен ли я иметь то же значение ключа, что и поля, определенные в классе serializer?

3. Какой результат вы получаете при запуске loaddata команды?

4. Я не получаю такой ошибки таблицы, но я думаю, что я понял, как загружать данные json как fixture. Моя проблема в том, как я могу настроить свой файл JSON на соответствующий формат.