所以我有以下结构:Django REST框架嵌套资源键“id”不可访问
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']
它确实返回'查理'。但由于某些原因ID似乎无法访问...
任何原因为什么会发生这种情况?我错过了什么吗? (我是新来的Django)
SOLUTION:刚刚发现为什么ID并没有在第一时间显示的原因是因为我不得不宣布它在像这样的字段:希望这有助于。
class ContactSerializer(serializers.ModelSerializer):
id = serializers.IntegerField() # ← Here
class Meta:
model = Contact
fields = (
'id',
'first_name',
'last_name',
)
我试过了。它解决了问题,但又创建了另一个问题:现在我无法创建联系人。它会抛出一个错误,指出ID字段是必需的... – MonsieurNinja 2015-03-16 08:52:31
您是否尝试将只读应用于clientfileserializer的id字段? – br3w5 2015-03-16 12:49:08
我和@MonsieurNinja有同样的问题,这使得需要手动设置ID。 – Sem 2017-04-07 14:11:31