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

Rob*_*sma 6 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)
Run Code Online (Sandbox Code Playgroud)

serializers.py:

leftovers_from_id = serializers.PrimaryKeyRelatedField(queryset=DayPlanning.objects.all(), source='leftovers_from', write_only=True, required=False)
Run Code Online (Sandbox Code Playgroud)

现在,我可以使用POST请求完美地为此模型创建一个新对象(无论是否有此字段为null/ None/为空).

但是,当我尝试使用PATCH更新字段时,我只能使用不同的值(外部模型的PK)更新它.我试过路过null,'',0-1leftovers_from_id,但结果要么是This field cannot be emptyPK 0 not found.

如何使用PATCH请求清除此字段?

谢谢!

Lin*_*via 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,
)
Run Code Online (Sandbox Code Playgroud)

然后你应该能够补丁:

{'leftovers_from_id': null}
Run Code Online (Sandbox Code Playgroud)