如何在Django中加载JSON数据并创建模型

2024-06-16 11:06:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试加载json数据文件,并使用给定的json数据文件创建播放器类。 我查阅了Django网站上的文档和一些关于stack overflow的帖子,但不知道怎么做。 当我尝试在models.py上创建create()的类方法时,我总是得到“无表存在”错误。 有人能帮我弄清楚吗??先谢谢你

对于models.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)

我试图通过查找堆栈溢出来自己做这件事 但无法找到将json数据加载到模型中的方法


Tags: namepyposjsonagemodelsclassplayer
1条回答
网友
1楼 · 发布于 2024-06-16 11:06:46

看一看固定装置: https://docs.djangoproject.com/en/3.1/howto/initial-data/

如果您可以将JSON文件调整为适当的格式,那么您将受益于Django的fixtures加载过程,其中包括您不必编写的字段验证。祝你好运

相关问题 更多 >