看起來不管我做什麼我都不能得到parent
這個字段不需要。我正在使用DRF版本3.2.3和Django 1.8.4。場的HyperlinkedRelatedField required = False not working
模型定義:
parent = models.ForeignKey(
"self", verbose_name=_("Parent"), blank=True, null=True,
default=None, related_name='children')
該機型還具有unique_together
:
unique_together = (('owner', 'parent', 'name',),)
場的
串行定義:
parent = serializers.HyperlinkedRelatedField(
view_name='category-detail', queryset=Category.objects.all(),
required=False)
我寫單元測試和響應代碼爲400,文本響應爲:
{'parent': [u'This field is required.']}
parent
字段是一個ForeignKey回到同一個表中的另一行。
Gals/Guys有什麼想法如何解決這個問題?
我有一個版本:有時一個字段可以通過其他一段代碼隱式地做'required'。我遇到的一個案例是模型級別的'unique_together'約束,它使序列化器級別上的所有包含字段成爲必需。這可能是你的情況嗎? – Ivan
Ivan,從來沒有想到這一點,是的,它在我的'unique_together'約束,但它可以是NULL,即使它在約束。我通過使用'parent' NULL的管理員創建了一個對象,它工作。但是,這在串行器中不起作用。它想要一個'Category'對象,並且不允許NULL/None。 – cnobile
我想你只需要重寫序列化程序'save'或viewset'create/update'就可以將值設置爲你想要的值。另一種選擇是嘗試從init的序列化程序的驗證程序中刪除['UniqueTogetherValidator'](http://www.django-rest-framework.org/api-guide/validators/#uniquetogethervalidator)。另一方面,我認爲這是有原因的。 – Ivan