Django Rest Framework:如何通过PATCH请求将字段设置为null?

时间:2017-11-02 13:09:02

标签: django rest django-rest-framework

我有ModelModelSerializer这个字段:

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请求清除此字段?

谢谢!

2 个答案:

答案 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