2016-02-16 9 views
5

सबसे पहले, यह घोंसले की वस्तुओं को बनाने या अपडेट करने के बारे में नहीं है, बल्कि केवल उन्हें सेट करने के बारे में है। जब मैं get एक Question, इसके ठीक काम कर के रूप में उम्मीदdjango आराम ढांचे में नेस्टेड ऑब्जेक्ट को कैसे सेट करें?

class CategorySerializer(serializers.ModelSerializer): 

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

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

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

अब,:

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) 

और निम्नलिखित serializers: मैं निम्नलिखित मॉडल: मैं सवाल क्षेत्रों पाने के निम्न उदाहरण का उपयोग करने देता है वह उम्मीद के रूप में श्रेणी क्षेत्रों के साथ।

समस्या मेरे पास है वह यह है कि जब मैं post करना चाहते हैं एक Question केवल Category.code होने, मैं वास्तव में सेट/एक मौजूदा Category उपयोग करने के लिए कैसे यकीन है। मैं अलग-अलग तरीकों की कोशिश कर रहा हूं, लेकिन उनमें से कोई भी काम नहीं करता है।

अगर मैं QuestionSerializer पर category= CategorySerializer() को हटा दें और मैं अपने अनुरोध में idCategory की (pk) गुजरती हैं, की तुलना में यह काम कर रहा है, Question संबंधित Category साथ सहेजा गया है।

क्या नेस्टेड ऑब्जेक्ट को क्रमबद्ध करने का तरीका इंगित करने का कोई तरीका है?

किसी भी टिप्पणी/सलाह/समाधान के लिए अग्रिम धन्यवाद।

+0

संभावित डुप्लिकेट: बना सकते हैं और एक के साथ एक वस्तु को अद्यतन नेस्टेड ऑब्जेक्ट वैल्यू (प्राथमिक कुंजी के बजाए)] (http://stackoverflow.com/questions/35181118/django-rest-framework-create-and-update-an-object-with-a-nested-object-value-i) – bakkal

उत्तर

1

मुझे यकीन नहीं है, अगर मुझे यह मिला। मेरे लिए ऐसा लगता है कि यह Question बनाने के बारे में है, है ना?

आप 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) 

की create विधि अधिलेखित कर सकते हैं हो सकता है कि आप भी read_only को CategorySerializer में क्षेत्र name सेट करने के लिए

[Django बाकी फ्रेमवर्क के
+0

मैंने विशेष रूप से कहा है कि घोंसला बनाने या अपडेट करने के बारे में नहीं है मेरी पहली वाक्य में एड ऑब्जेक्ट। यह मौजूदा एक का उपयोग करने के बारे में है। –

+0

@storm_buster यही जवाब है (मेरा दोनों मामलों को कवर करता है)। यह एक नया _Question_ बनाता है, लेकिन प्रश्न उदाहरण से संलग्न करने के लिए मौजूदा _Category_ खोजने के लिए क्वेरी करेगा। – bakkal

+0

@storm_buster जब आप डेटा पोस्ट करते हैं तो एक धारावाहिक के 'निर्माण' विधि को कॉल किया जाता है। या क्या आपका मतलब 'पैच/पुट' अनुरोध है? फिर आपको उपरोक्त वर्णित जैसा ही 'अद्यतन' विधि के साथ करना चाहिए। – ilse2005

संबंधित मुद्दे