似乎无论我做什么,我都无法获得parent
字段。我正在使用DRF版本3.2.3和Django 1.8.4。
字段的模型定义:
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有任何想法如何解决这个问题?
答案 0 :(得分:1)
有时,某个字段可以通过其他一些代码隐式地生成required
。我遇到的一个案例是模型级unique_together
约束,它使序列化程序级别所需的所有包含字段成为可能。来自doc:
注意:
UniqueTogetherValidation
类总是强加一个隐式约束,它应用的所有字段总是 按要求处理。具有默认值的字段是例外 这是因为即使从用户输入中省略它们也总是提供一个值。
我认为您必须覆盖序列化程序save
或viewset create/update
才能将值设置为您想要的值。另一种方法是尝试从UniqueTogetherValidator
中的序列化程序验证程序中删除__init__
。另一方面,我认为这是有原因的。
值得一提的是,在admin和其他任何地方使用ModelForm
时,都不需要这些字段,因为ModelForm
完全是另一回事,它以自己的方式处理验证。