【发布时间】:2019-03-28 12:19:55
【问题描述】:
我正在尝试按照此文档创建嵌套序列化程序和 api 视图。 https://www.django-rest-framework.org/api-guide/relations/#nested-relationships
但是,我无法理解我错过了什么,因为我的结果不是预期的。
我已按照此示例处理我的案例,并检查了有关相同的各种其他指南。尝试了不同的视图和不同的序列化器格式。
模型代码是这样的:-
class Round(models.Model):
player_num = models.IntegerField(null=False, default=1)
class Seats(models.Model):
stack = models.IntegerField(null=False, default=0)
round = models.ForeignKey(Round, on_delete=models.CASCADE)
state = models.IntegerField(choices=STATE)
序列化器的代码是这样的:-
class SeatsSerializer(serializers.ModelSerializer):
class Meta:
model = Seats
fields = ('stack','state')
class RoundSerializer(serializers.ModelSerializer):
seats = SeatsSerializer(many = True, read_only=True)
class Meta:
model = Round
fields = ('player_num','seats')
我想要这样的输出:
{
'player_num': 3,
'seats': [
{'stack': 100, 'state': 'participating', 'name': 'p1', 'uuid': 'ftwdqkystzsqwjrzvludgi'},
{'stack': 100, 'state': 'participating', 'name': 'p2', 'uuid': 'bbiuvgalrglojvmgggydyt'},
]
}
但是,我得到的输出是:
{
'player_num': 3,
}
【问题讨论】:
-
如果您想使用 DRF 嵌套序列化程序,则 Seats 和 Round 模型之间需要有一个 relationship。
-
有,我打错了。我现在进行了编辑。请检查
-
尝试在
RoundSerializer(2x) 中将seats替换为seats_set。 -
哦.. 有效!!这种蹩脚的错误。谢谢!
-
没问题。不过,请考虑使用单数模型名称 (
Seat)。
标签: django rest api django-rest-framework