Django REST フレームワーク (2.1.16) には、null 可能な FK フィールドを持つモデルがありますtype
が、POST 作成要求400 bad request
では、そのフィールドが必要であると示されます。
私のモデルは
class Product(Model):
barcode = models.CharField(max_length=13)
type = models.ForeignKey(ProdType, null=True, blank=True)
シリアライザーは次のとおりです。
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
exclude = ('id')
type
次のようにシリアライザーに明示的に追加しようとしました
class ProductSerializer(serializers.ModelSerializer):
type = serializers.PrimaryKeyRelatedField(null=True, source='type')
class Meta:
model = Product
exclude = ('id')
そしてそれは効果がありません。
http://django-rest-framework.org/topics/release-notes.html#21x-seriesから、バグがあったことがわかりますが、2.1.7 で修正されました。
FK フィールドを適切に処理するには、シリアライザーをどのように変更すればよいですか?
ありがとう!
更新:それが与えるシェルから
>>> serializer = ProductSerializer(data={'barcode': 'foo', 'type': None})
>>> print serializer.is_valid()
True
>>>
>>> print serializer.errors
{}
ただし、type=None なし:
>>> 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,