我的第一个问题。很高兴成为这个社区的一员。 我的问题:我正在使用python3和django rest框架来创建API。 我有以下型号:
class Game(models.Model):
# id = models.AutoField(primary_key=True)
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=100)
url = models.CharField(max_length=100)
created_at = models.BigIntegerField()
updated_at = models.BigIntegerField()
summary = models.CharField(max_length=2000)
first_release_date = models.BigIntegerField()
category = models.SmallIntegerField()
cover = models.CharField(max_length=100)
def __str__(self):
return self.name
class ReleaseDate(models.Model):
id = models.AutoField(primary_key=True)
game = models.ForeignKey(Game, on_delete=models.CASCADE)
created_at = models.BigIntegerField()
updated_at = models.BigIntegerField()
category = models.SmallIntegerField()
platform = models.SmallIntegerField()
date = models.BigIntegerField()
region = models.SmallIntegerField()
y = models.SmallIntegerField()
m = models.SmallIntegerField()
human = models.CharField(max_length=10)
要为Game和ReleaseDate创建一个序列化器,我会这样做:
class ReleaseDateSerializer(serializers.ModelSerializer):
class Meta:
model = ReleaseDate
fields = '__all__'
class GameSerializer(serializers.ModelSerializer):
class Meta:
model = Game
fields = '__all__'
......这将为我提供:
[
{
"name": "God of war",
"url": "efgsd"
},
{
"name": "Uncharted",
"url": "sgdfd"
},
{
"name": "Fortnight",
"url": "efgsd"
}
]
我将如何实现这一目标,即:
[
{
"name": "God of war",
"url": "efgsd"
"release_dates": "[
{..},
{..}
]"
},
{
"name": "Uncharted",
"url": "sgdfd"
"release_dates": "[
{..},
{..}
]"
},
{
"name": "Fortnight",
"url": "efgsd"
"release_dates": "[
{..},
{..}
]"
}
]
非常感谢!
答案 0 :(得分:0)
如drf documentation for nested serializers所述,您必须执行类似
的操作修改game
模型中的ReleaseDate
FK,以包含related_name
属性release_date
class Game(models.Model):
game = models.ForeignKey(Game, related_name = 'release_date', on_delete = models.CASCADE)
然后更新您的GameSerializer
class GameSerializer(serializers.ModelSerializer):
release_date = ReleaseDateSerializer(many = True, read_only = True)
class Meta:
model = Game
fields = ('name', 'url', 'release_date', )