Więc mam następującą strukturę:Django Framework zagnieżdżonych zasobów REST klucz "id" unaccessible
ClientFile należy do właściciela (class name = kontaktowego). Próbuję utworzyć plik klienta przy użyciu interfejsu API. Żądanie zawiera następujące dane:
{
name: "Hello!"
owner: {
id: 1,
first_name: "Charlie",
last_name: "Watson"
}
}
Stworzyłem serializer zgodnie z moją strukturą. Mając nadzieję, że to wywołanie API utworzyłoby plik klienta o nazwie "Hello!" i Contact id 1 jako właściciel:
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'])
Dostaję się do metody create. Jednak jedyne pole, które potrzebuję, to (['owner']['id'])
. Jeśli wykonam print ['owner']['first_name']
, to zwróci "Charlie". Ale identyfikator z pewnych powodów nie jest dostępny ...
Jakiekolwiek powody, dla których może to mieć miejsce? Czy coś mi brakuje? (Jestem nowy w Django)
ROZWIĄZANIE: Po prostu okazało się, że powód nie wykazał ID w pierwszej kolejności dlatego musiałem zadeklarować ją w dziedzinach tak: Mam nadzieję, że to pomaga.
class ContactSerializer(serializers.ModelSerializer):
id = serializers.IntegerField() # ← Here
class Meta:
model = Contact
fields = (
'id',
'first_name',
'last_name',
)
Próbowałem. Naprawia problem, ale tworzy kolejny: Teraz nie mogę utworzyć kontaktu. Zgłasza błąd informujący, że pole identyfikacyjne jest wymagane ... – MonsieurNinja
Czy próbowałeś zastosować pole tylko do odczytu w polu identyfikatora również dla narzędzia clientfileserializer? – br3w5
Mam ten sam problem co @MonsieurNinja, to powoduje, że id musi być ustawiony ręcznie. – Sem