2016-03-09 6 views
5

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 ...

  1. uzyskać złożone dzieci validated_data.pop('children')
  2. Pętla przez t hem i dodać każdy do parent.children wiele do wielu
  3. 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 "}]

+0

Czy "submitted_children" zawiera oczekiwane wartości? – ilse2005

+0

W JSON? Tak. –

+0

Mam na myśli w metodzie aktualizacji. Drukujesz to? – ilse2005

Odpowiedz

2

Myślę, że Twój JSON nie jest poprawny. Powinno to wyglądać następująco:

{ 
"id": 1, 
"url": "some url", 
"name": "John Smith", 
"children": [ 
    {"id": 2, "url": "child url", "name": "childs name"}, 
    {"id": 3, ...} 
] 
} 
+0

OHHHH! Sposób, w jaki go wysyłałem, nie miał pojęcia, gdzie go umieścić.I dla PATCH będzie TYLKO pisać dzieci. Czy to prawda? –

+0

sposób, w jaki utworzyłeś metodę "update", po prostu napisze dzieci. – ilse2005

Powiązane problemy