所以我有以下結構: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