从序列化程序获取所有详细信息.django中的PrimaryKeyRelatedField



所以我有我的家族序列化程序,如下

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可写嵌套的方法。

相关内容

最新更新