我有Model
和ModelSerializer
这个字段:
models.py:
leftovers_from = models.ForeignKey('DayPlanning', null=True, blank=True, related_name='extra_for', on_delete=models.CASCADE)
serializers.py:
leftovers_from_id = serializers.PrimaryKeyRelatedField(queryset=DayPlanning.objects.all(), source='leftovers_from', write_only=True, required=False)
现在,我可以使用POST请求完美地为此模型创建一个新对象(无论是否包含此字段null
/ None
/空。)
但是当我尝试使用PATCH更新字段时,我只能使用不同的值(外部模型的PK)更新它。我已尝试将null
,''
,0
和-1
传递给leftovers_from_id
,但结果为This field cannot be empty
或{{1} }。
如何使用PATCH请求清除此字段?
谢谢!
答案 0 :(得分:6)
请注意required
表示可以省略该字段以进行创建或“完整”更新。修补程序会绕过required
字段以实现部分更新。
因此,您需要将allow_null
参数设置为True:
leftovers_from_id = serializers.PrimaryKeyRelatedField(
queryset=DayPlanning.objects.all(),
source='leftovers_from', write_only=True,
required=False, allow_null=True,
)
然后你应该可以使用:
{'leftovers_from_id': null}
答案 1 :(得分:1)
要清除关系,您应将值设置为None
。由于您专门提到了PATCH
方法,因此请确保您也了解partial
参数:http://www.django-rest-framework.org/api-guide/serializers/#partial-updates