2016-03-09 25 views
5

Şu an birkaç saattir bakıyorum ve çözümü bulamıyorum. Sadece anlamadım.Tamamen Kaybedildi: Çok Sayıda Çok Sayıda Serializer ve Güncelleme Django Rest Framework

Pek çok çocuğu olan bir ebeveynim var. Ebeveynlerinin tüm çocuklarını almama izin veren bir manzara yarattım. Şimdi bu listeyi sonlandırmak ve yeni çocuk listesiyle ebeveyne PATCH yapmak istiyorum. Özel bir update yöntemini yazmam gerektiğini anlıyorum, ancak bu işi nasıl yapacağımı anlayamıyorum.

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 

olduğunu ne olması gerektiğinin Benim anlayış ...

  1. alın gönderilen çocukların validated_data.pop('children'): Burada
    class ChildSerializer(serializers.HyperlinkedModelSerializer): 
    
        class Meta: 
         model = models.Child 
         fields = ('id', 'url', 'name',) 
    

    benim Veli serileştiricisi var: Burada

    benim Çocuk serileştiricisi var
  2. T ile döngü etek ve parent.children her biri pek çok
  3. Kaydet ebeveyn modeli

eklemek Herhalde burada bir düzine farklı fikirleri denedim ama bu işe almak gibi olamaz. Yukarıdaki kod, children_set değerini değiştirmiyor.

Herhangi bir öneri çok hoş geldiniz.

Başvuru için, ben şu inceledim:

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

Ve daha bir sürü ama doğru bunları hatırlamıyorum şimdi

GÜNCELLEME:

[{ "id": 2, "url": "http://127.0.0.1:8000/api/v1/children/2", "FIRST_NAME": "Tom", "last_name": "Jones", "date_of_birth" : "1969-03 -14 "}]

+0

'submit_children' beklenen değerleri içeriyor mu? JSON'da – ilse2005

+0

? Evet. –

+0

Güncelleme yönteminde demek istiyorum. Yazdırdın mı? – ilse2005

cevap

2

JSON'unuzun doğru olmadığını düşünüyorum. Şöyle görünmelidir:

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

OHHHH! Onu yolladığım yol API'nın nereye koyacağına dair hiçbir fikri yoktu.Ve bir PATCH için sadece çocuklara yazacak. Bu doğru mu? –

+0

"update" yöntemini oluşturma şekliniz, sadece çocukları yazacaktır. – ilse2005