所以我有我的家族序列化程序,如下
class FamilySerializer(serializers.ModelSerializer):
members = serializers.PrimaryKeyRelatedField(
many=True,
queryset=Parishioner.objects.all(),
allow_null=True
)
class Meta:
model = Family
fields = ('id', 'name', 'address', 'monthly_contribution', 'members', 'enabled')
read_only_fields = ('id',)
depth = 1
家庭可以有多个教区居民,所以这是一对多的关系。当我向/api/family/1/
发送GET请求时,我得到的响应低于
{
"id": 1,
"name": "Mendis Family test",
"address": "No 48, Katukurunda, Moratuwa",
"monthly_contribution": 50.0,
"members": [
"1",
"2"
],
"enabled": true
}
正如您在members数组中看到的,我只能看到成员的id。
如何获取该数组中member
的所有数据(而不仅仅是id、名称、地址等(?
我试着把depth = 1
改成许多数字,但没有成功。
我已经有了member
的Searalizer,它被称为ParishionerSerializer
但是我应该能够将members
添加到Family
您必须为Member
:创建自己的序列化程序
class MemberSerializer(serializers.ModelSerializer):
name = serializers.TextField(...)
class Meta:
model = Member
fields = ('id', 'name', )
并在您的系列序列化程序中使用:
class FamilySerializer(serializers.ModelSerializer):
members = MemberSerializer(many=True)
class Meta:
model = Family
fields = ('id', 'name', 'address', 'monthly_contribution', 'members', 'enabled')
read_only_fields = ('id',)
根据评论更新:
嵌套序列化程序在默认情况下当然是不可写的,这在文档中有更深入的描述。通过将read_only=True
传递给序列化程序,可以将其用于GET
请求。如果要更改嵌套字段,则需要重写外部(!(序列化程序的update()
方法,或者使用类似django可写嵌套的方法。