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

问题描述 投票:4回答:2

我有一个ModelModelSerializer与这个领域:

models.朋友:

leftovers_from = models.ForeignKey('DayPlanning', null=True, blank=True, related_name='extra_for', on_delete=models.CASCADE)

serialize认识.朋友:

leftovers_from_id = serializers.PrimaryKeyRelatedField(queryset=DayPlanning.objects.all(), source='leftovers_from', write_only=True, required=False)

现在我可以使用POST请求完美地为这个模型创建一个新对象(有或没有这个字段是null / None / empty。)

但是,当我尝试使用PATCH更新字段时,我只能使用不同的值(外部模型的PK)更新它。我已经尝试将null''0-1传递给leftovers_from_id,但结果是This field cannot be emptyPK 0 not found

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

谢谢!

django rest django-rest-framework
2个回答
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
投票

要清除关系,应将值设置为None。由于您特别提到了PATCH方法,请确保您也了解partial参数:http://www.django-rest-framework.org/api-guide/serializers/#partial-updates

© www.soinside.com 2019 - 2024. All rights reserved.