So habe ich die folgende Struktur:Django REST-Framework verschachtelt Ressourcenschlüssel "id" unaccessible
A ClientFile einen Eigentümer gehört (class name = Kontakt). Ich versuche, eine Clientdatei mithilfe der API zu erstellen. Die Anfrage enthält folgende Daten:
{
name: "Hello!"
owner: {
id: 1,
first_name: "Charlie",
last_name: "Watson"
}
}
Ich habe den Serializer nach meiner Struktur erstellt. Ich hoffe, dass dieser API-Aufruf eine Clientdatei mit dem Namen "Hallo!" und Kontakt ID 1 als Besitzer:
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'])
Ich komme in die create-Methode. Das einzige Feld, das ich benötige, ist jedoch nicht zugänglich. Wenn ich print ['owner']['first_name']
mache, gibt es "Charlie" zurück. Aber die ID scheint aus einigen Gründen nicht zugänglich zu sein ...
Gründe warum dies passieren kann? Fehle ich etwas? (Ich bin neu in Django)
LÖSUNG: Just fand heraus, dass der Grund, warum ID nicht in erster Linie zeigen, tat, war, weil ich es in den Bereichen wie so zu erklären hatte: Hoffe, das hilft.
class ContactSerializer(serializers.ModelSerializer):
id = serializers.IntegerField() # ← Here
class Meta:
model = Contact
fields = (
'id',
'first_name',
'last_name',
)
Ich habe es versucht. Es behebt das Problem, aber schafft ein anderes: Jetzt kann ich keinen Kontakt erstellen. Es wird ein Fehler ausgegeben, der besagt, dass das ID-Feld erforderlich ist ... – MonsieurNinja
Haben Sie versucht, schreibgeschützt auch auf das ID-Feld für den Clientfileserializer anzuwenden? – br3w5
Ich habe das gleiche Problem wie @MonsieurNinja, dies macht die ID manuell gesetzt werden muss. – Sem