В структуре Django REST (2.1.16) у меня есть модель с нулевым полем 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?
Спасибо!
UPDATE: из оболочки он дает
>>> 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,