【问题标题】:Trying to create nested view of django model classes using relations尝试使用关系创建 django 模型类的嵌套视图
【发布时间】: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


【解决方案1】:

试试这个:

round = models.ForeignKey(Round, on_delete=models.CASCADE, related_name='seats')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多