2016-02-16 16 views
5

Her şeyden önce, bu, yerleştirme nesneleri oluşturma ya da güncelleştirmeyle ilgili değil, yalnızca bunları ayarlamakla ilgilidir.Django dinlenme çerçevesinde yuvalanmış nesne nasıl ayarlanır?

class Category(models.Model): 
    code= models.CharField(max_length=2) 
    name= models.CharField(max_length=100) 

class Question(models.Model): 
    category= models.ForeignKey(Category, related_name='categories') 
    title = models.CharField(max_length=100) 

ve aşağıdaki serializers: Aşağıdaki modelleri var: Artık

class CategorySerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Category 
     fields = ('code', 'name') 

class QuestionSerializer(serializers.ModelSerializer): 
    category= CategorySerializer() 

    class Meta: 
     model = Question 
     fields = ('category', 'title') 

, ben get bir Question, ince çalışma beklendiği gibi zaman: Soruyu alanlarını olsun şu örneği kullanmanızı sağlar kategori alanları beklendiği gibi. Ben post istediğinizde Ben

problem Question sadece Category.code sahip, ben varolan Category kullanmak/nasıl ayarlanacağı gerçekten emin değilim olduğunu. Farklı yollar deniyorum, ama hiçbiri işe yaramadı. Ben QuestionSerializer üzerinde category= CategorySerializer() kaldırmak ve onu çalışıyor daha benim isteğinde Category arasında id (pk) geçerseniz

, Question ilgili Category kaydedilir.

İç içe yerleştirilmiş nesneyi nasıl serileştireceğini belirtmenin bir yolu var mı?

Herhangi bir yorum/öneri/çözüm için şimdiden teşekkür ederiz.

+0

Tekrarlama olabilir: oluşturmak ve birlikte bir nesneyi güncellemek iç içe nesne değeri (Birincil Anahtar yerine)] (http://stackoverflow.com/questions/35181118/django-rest-framework-create-and-update-an-object-with-a-nested-object-value-i) – bakkal

cevap

1

Eğer anladım, emin değilim. Bana göre, Question'u oluşturma ile ilgili değil mi?

Sen Belki de read_only için CategorySerializer alanına name belirlemek zorunda QuestionSerializer

class QuestionSerializer(serializers.ModelSerializer): 
    category= CategorySerializer() 

    class Meta: 
     model = Question 
     fields = ('category', 'title') 

    def create(self, validated_data): 
     category = validated_data.pop('category') 
     category_obj = Category.objects.get(code=category['code']) 

     return self.Meta.model.objects.create(category=category, **validated_date) 

ait create yöntemi üzerine yazabilirsiniz

[Django DİNLENME Framework
+0

Özellikle bunun bir yuva oluşturma veya güncelleştirmeyle ilgili olmadığını söyledim ilk cümledeki ed nesnesi. mevcut olanı kullanmakla ilgilidir. –

+0

@storm_buster Bu cevabın yaptığı şey (mayın her iki durumu da kapsar). Yeni bir _Question_ oluşturur, ancak Soru örneğine eklenecek mevcut bir _Category_ dosyasını bulmak için sorgulanır. – bakkal

+0

@storm_buster "post" verdiğinizde "create" yöntemi bir serializer denir. Yoksa "PATCH/PUT" isteğini mi kastediyorsunuz? O zaman, yukarıda açıklanan "update" yöntemiyle benzer bir şey yapmalısınız. – ilse2005