#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 на соответствующий формат.