में Nullable ForeignKey क्षेत्रों Django बाकी फ्रेमवर्क (2.1.16) में मैं व्यर्थ FK क्षेत्र type
के साथ एक मॉडल है, लेकिन पोस्ट निर्माण अनुरोध 400 bad request
जो कहता है कि फ़ील्ड की आवश्यकता है देता है।Django बाकी ढांचे
मेरे मॉडल
class Product(Model):
barcode = models.CharField(max_length=13)
type = models.ForeignKey(ProdType, null=True, blank=True)
है और serializer है:
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
exclude = ('id')
मैं की तरह
class ProductSerializer(serializers.ModelSerializer):
type = serializers.PrimaryKeyRelatedField(null=True, source='type')
class Meta:
model = Product
exclude = ('id')
serializer के लिए स्पष्ट रूप से type
जोड़ने की कोशिश की है और यह कोई प्रभाव नहीं है।
http://django-rest-framework.org/topics/release-notes.html#21x-series मुझे लगता है कि वहाँ एक बग था, लेकिन यह 2.1.7 में तय किया गया था से।
मुझे अपने एफके फ़ील्ड को सही तरीके से संभालने के लिए सीरियलाइज़र को कैसे बदलना चाहिए?
धन्यवाद!
अद्यतन: खोल से यह देता है
>>> serializer = ProductSerializer(data={'barcode': 'foo', 'type': None})
>>> print serializer.is_valid()
True
>>>
>>> print serializer.errors
{}
लेकिन प्रकार के बिना = कोई नहीं:
>>> serializer = ProductSerializer(data={'barcode': 'foo'})
>>> print serializer.is_valid()
False
>>> print serializer.errors
{'type': [u'This field is required.']}
>>> serializer.fields['type']
<rest_framework.relations.PrimaryKeyRelatedField object at 0x22a6cd0>
>>> print serializer.errors
{'type': [u'This field is required.']}
दोनों ही मामलों में यह देता है
>>> serializer.fields['type'].null
True
>>> serializer.fields['type'].__dict__
{'read_only': False, ..., 'parent': <prodcomp.serializers.ProductSerializer object at 0x22a68d0>, ...'_queryset': <mptt.managers.TreeManager object at 0x21bd1d0>, 'required': True,
मत सोचो इससे आपकी समस्या से संबंधित है, लेकिन उन 'exclude' विकल्प की तरह दिखता है एक याद कर रहे हैं अल्पविराम, जो उन्हें ट्यूपल्स के रूप में माना जाएगा। 'बहिष्कृत करें ('आईडी',)' –
यह भी ध्यान दें कि आपको 'स्रोत =' प्रकार 'की आवश्यकता नहीं है, क्योंकि इस मामले में फ़ील्ड नाम पहले से ही उस स्रोत से मेल खाता है जिसका आप उपयोग करना चाहते हैं। –
@TomChristie हां, मैंने पहले 'स्रोत =' प्रकार ' –