Patrzę na to od kilku godzin i nie znajduję rozwiązania. Po prostu tego nie rozumiem.Całkowicie utracone: wiele do wielu z serializerami i aktualizacja w Django Rest Framework
Mam rodzica, który ma wiele dzieci. Stworzyłem widok, który pozwala mi uzyskać wszystkie dzieci rodziców. Teraz chcę zakończyć tę listę i wykonać PATCH dla rodzica z nową listą dzieci. Rozumiem, że muszę napisać niestandardową metodę update
, ale nie wiem, jak to zrobić.
Oto moje dziecko serializer:
class ChildSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = models.Child
fields = ('id', 'url', 'name',)
Oto mój nadrzędna serializer:
class ParentSerializer(serializers.HyperlinkedModelSerializer):
children = ChildSerializer(many=True)
class Meta:
model = models.Parent
fields = ('id', 'url', 'name', 'children',)
def update(self, instance, validated_data):
submitted_children = validated_data.get('children')
if submitted_children:
for child in submitted_children:
child_instance = Child.objects.get(id=child.id)
instance.children.add(child_instance)
instance.save()
return instance
moje zrozumienie tego, co musi się zdarzyć jest ...
- uzyskać złożone dzieci
validated_data.pop('children')
- Pętla przez t hem i dodać każdy do parent.children wiele do wielu
- zapisać model rodzic
ja prawdopodobnie próbował tuzina różnych pomysłów tutaj, ale nie wydaje się uzyskać to do pracy. Powyższy kod nie zmienia elementu children_set.
Wszelkie sugestie są mile widziane.
Dla porównania, Uczyłem następujące:
http://www.django-rest-framework.org/api-guide/serializers/#saving-instances
http://www.django-rest-framework.org/api-guide/serializers/#writable-nested-representations
http://www.django-rest-framework.org/api-guide/serializers/#validation
django rest framework many to many json write
i kilka więcej, ale nie pamiętam ich prawo teraz
UPDATE:
[{ "identyfikator" 2 "URL" "http://127.0.0.1:8000/api/v1/children/2", "imię": "Tom", "LAST_NAME": "Jones", "date_of_birth" : "1969-03 -14 "}]
Czy "submitted_children" zawiera oczekiwane wartości? – ilse2005
W JSON? Tak. –
Mam na myśli w metodzie aktualizacji. Drukujesz to? – ilse2005