【问题标题】:DRF - Nested Reverse Relation SerializersDRF - 嵌套反向关系序列化器
【发布时间】:2019-11-09 18:13:56
【问题描述】:

如何创建一个序列化程序,以返回 family 的所有结果以及所有反向关系?

         Family
           |
    +------+------+
    |             |
 Student    EmergencyContact
    |
   Fee

例如

{family: [{id: 1,
          student_set: [{id: 1, name: "bob Jones", fee_set: [{"Maths Fee": 3,  "English Fee": 5}}],
                        {id: 2, name: "Mike Jones", fee_set: [{"English Fee": 5}}],
          emergency_contact_set: [{id: 1, name:"Joe"}, {id: 2, name: "Mike"}]
         ]
}

我可以在字段中使用<model>_set 获得单个嵌套级别的数据,例如student_set, emergency_contact_set,但不是深嵌套,(fee_set)。

class FamilySerializer(serializers.ModelSerializer):
    student = StudentSerializer(many=True, read_only=True)  # does nothing
    class Meta:
          model = Family
          fields = ["id",
                    "name", 
                    "student", # returns nothing
                    "student_set" # only returns the students WITHOUT the fees
                   ]

输出(没有fees):

{family: [{id: 1,
          student_set: [{id: 1, name: "bob Jones"}],
                        {id: 2, name: "Mike Jones"}],
          emergency_contact_set: [{id: 1, name:"Joe"}, {id: 2, name: "Mike"}],
         ]
}

理想情况下,我想在Family 中使用StudentSerializerEmergencyContactSerializer,以获取嵌套集。

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    您必须在XXXXSerializer 中使用source kwarg,例如。 source="<field>_set"(或在模型中重命名related_field,并将其用作source)。

    class FamilySerializer(serializers.ModelSerializer):
        student = StudentSerializer(many=True, read_only=True, source="student_set") 
        ...
    
        class Meta:
            ...
    

    student 字段将可供StudentSerializer 使用

    见: https://riptutorial.com/django-rest-framework/example/30725/getting-list-of-all-related-children-objects-in-parent-s-serializer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-22
      • 2017-02-09
      • 2020-12-29
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 2020-09-03
      • 1970-01-01
      相关资源
      最近更新 更多