2013-02-21 15 views
16

मैं Django बाकी ढांचे का उपयोग कर रहा है और सिर्फ इस तरह एक साधारण serializer बनाने:आईडी क्षेत्र

class PackageSerializer(serializers.HyperlinkedModelSerializer): 

    class Meta: 
     model = Package 
     fields = ('id','url', 'title','location') 

हालांकि मैं इस त्रुटि मिलती है

KeyError at /cerberus/packages/ 
'id' 

कैसे आ मैं कर सकते हैं ' मेरे धारावाहिक डेटा के हिस्से के रूप में प्राथमिक कुंजी 'आईडी' प्राप्त नहीं करते? मदद के लिए धन्यवाद!

उत्तर

43

HyperlinkedModelSerializer डिफ़ॉल्ट रूप से id शामिल नहीं है। 2.2 में और इससे पहले कि आप एक क्षेत्र के रूप में स्पष्ट रूप से इसे जोड़ने के लिए ...

class PackageSerializer(serializers.HyperlinkedModelSerializer): 
    id = serializers.Field() 

    class Meta: 
     model = Package 
     fields = ('id','url', 'title','location') 

2,3 के बाद से, आप बस 'आईडी' fields विकल्प को जोड़ सकते हैं ... की आवश्यकता होगी

class PackageSerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = Package 
     fields = ('id','url', 'title','location') 

बाद 3.x से, आप Field() के बजाय ReadOnlyField() का उपयोग करना चाहिए आप यह स्पष्ट रूप से जोड़ सकते हैं और fields विकल्प का उपयोग नहीं करना चाहते हैं ...

class PackageSerializer(serializers.HyperlinkedModelSerializer): 
    id = serializers.ReadOnlyField() 

    class Meta: 
     model = Package 
+0

इस टिप ने मुझे rest_framework [link] (http://www.django-rest-framework.org/tutorial/1-serialization#using-modelserializers) के ट्यूटोरियल के माध्यम से मेरी सहायता की। ट्यूटोरियल में आपके पास 'pk = serializers.Field() 'की एक पंक्ति है, लेकिन यह' id = serializers.Field() 'होना चाहिए। मैंने उस टाइपो का निरीक्षण किया। – Semo

+2

अब यह डीडीओ रेस्ट फ्रेमवर्क 3.x – rrauenza

+0

धन्यवाद के लिए 'id = serializers.ReadOnlyField()' होना चाहिए .. अच्छा स्पष्टीकरण !! –

0

मैं सिर्फ twea यह थोड़ा और अधिक प्लगेबल इस वर्ग बनाने के द्वारा बनाने के लिए ked:

class HyperlinkedModelSerializerWithId(serializers.HyperlinkedModelSerializer): 
    """Extend the HyperlinkedModelSerializer to add IDs as well for the best of 
    both worlds. 
    """ 
    id = serializers.ReadOnlyField() 

फिर, बस का उपयोग करें कि आपके serializer बनाने के लिए और आप अपने रास्ते पर होंगे।