Django RESTフレームワーク(2.1.16)では、null可能なFKフィールドtype
を持つモデルがありますが、POST作成要求は、フィールドが必須であることを示す400 bad request
を与えます。Django RESTフレームワークのNullable ForeignKeyフィールド
私のモデルは
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')
私は
class ProductSerializer(serializers.ModelSerializer):
type = serializers.PrimaryKeyRelatedField(null=True, source='type')
class Meta:
model = Product
exclude = ('id')
ようシリアライザに明示的type
を追加しようとしました、それは効果がありません。
投稿者http://django-rest-framework.org/topics/release-notes.html#21x-seriesバグがありましたが、2.1.7で修正されました。
FKフィールドを適切に処理するためにシリアライザを変更する必要がありますか?
ありがとうございます!
UPDATE:どちらの場合も
>>> 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'オプションのように見えますカンマは、それらがタプルとして扱われるようにします。 'exclude =( 'id'、)' –
'source = 'type''は必要ないことに注意してください。この場合、フィールド名はすでに使用したいソースと一致しています。 –
@TomChristieはい、私は最初に 'source = 'type''なしで試しました –