gpt4 book ai didi

python - Django REST Framework 嵌套资源 key "id"无法访问

转载 作者:太空狗 更新时间:2023-10-29 17:28:42 25 4
gpt4 key购买 nike

所以我有以下结构:

ClientFile 属于所有者(类名 = 联系人)。我正在尝试使用 API 创建一个 Clientfile。该请求包含以下数据:

{
name: "Hello!"
owner: {
id: 1,
first_name: "Charlie",
last_name: "Watson"
}
}

我根据我的结构创建了序列化程序。希望此 API 调用将创建一个名为“Hello!”的客户端文件。联系人 ID 1 作为所有者:

class ContactSerializer(serializers.ModelSerializer):
class Meta:
model = Contact
fields = (
'id',
'first_name',
'last_name',
)

class ClientfileSerializer(serializers.ModelSerializer):

owner = ContactSerializer(read_only=False)

class Meta():
model = Clientfile
fields = (
'id',
'name',
'owner',
)

def create(self, validated_data):

owner = Contact.objects.get(pk=validated_data['owner']['id'])

我确实进入了创建方法。但是,我需要的唯一字段 (['owner']['id']) 不可访问。如果我执行 print ['owner']['first_name'],它会返回“Charlie”。但是由于某些原因,ID似乎无法访问...

为什么会发生这种情况?我错过了什么吗? (我是 Django 的新手)


解决方案:刚刚发现 ID 最初没有显示的原因是因为我必须像这样在字段中声明它:希望这有帮助。

class ContactSerializer(serializers.ModelSerializer):

id = serializers.IntegerField() # ← Here

class Meta:
model = Contact
fields = (
'id',
'first_name',
'last_name',
)

最佳答案

在 Django REST Framework AutoField 字段(那些自动生成的)默认为只读。来自 the docs :

read_only

Set this to True to ensure that the field is used when serializing a representation, but is not used when creating or updating an instance during deserialization.

Defaults to False

你可以通过inspecting your serializer看到这个通过在您的 shell 中打印表示:

serializer = ClientfileSerializer()
print repr(serializer)

您可以通过针对 extra_kwargs 中的 id 字段设置 read_only=False 来覆盖它:

class ContactSerializer(serializers.ModelSerializer):
class Meta:
model = Contact
fields = (
'id',
'first_name',
'last_name',
)
extra_kwargs = {'id': {'read_only': False}}

class ClientfileSerializer(serializers.ModelSerializer):

owner = ContactSerializer(read_only=False)

class Meta():
model = Clientfile
fields = (
'id',
'name',
'owner',
)
extra_kwargs = {'id': {'read_only': False}}

关于python - Django REST Framework 嵌套资源 key "id"无法访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29034295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com