【问题标题】:Django Rest Framework: How to set a field to null via PATCH request?Django Rest Framework:如何通过 PATCH 请求将字段设置为空?
【发布时间】:2018-04-15 00:43:17
【问题描述】:

我有一个 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/empty。)

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

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

谢谢!

【问题讨论】:

  • 发表你的看法。

标签: django rest django-rest-framework


【解决方案1】:

请注意,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}

【讨论】:

  • 工作,谢谢! blank=True, null=True, required=False, allow_null=True, Damnit Django 我要声明多少次空虚:p 不过你的解释是有道理的,再次感谢!
  • 这里的事情是你明确定义了序列化器字段,所以它会破坏 DRY 一点。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2015-07-28
    相关资源
    最近更新 更多