【问题标题】:Django rest framework empty field in partial update not updated部分更新中的Django rest框架空字段未更新
【发布时间】:2020-09-29 18:52:36
【问题描述】:

当我尝试使用补丁进行部分更新或使用 put 进行更新时。对象首先看起来像这样:

{
  "name":"Amsterdam 1",
  "location":"Amsterdam",
  "client":"b9c7d1c9-4b1b-4f0d-af30-2d8ffb97647e"
}

然后我删除对象上的client 并将其发回:

{
  "name":"Amsterdam 1",
  "location":"Amsterdam"
}

但这不会从对象中删除客户端。

模型如下所示:


class FixedLocation(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=155)
    client = models.ForeignKey(Client, on_delete=models.CASCADE, null=True, blank=True)
    location = models.CharField(max_length=263)

这就是我的序列化器的样子

class FixedLocationSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.FixedLocation
        fields = ["id", "name", "location", "client"]

我希望当我不发回client 时,它会从对象中删除。有谁知道我如何做到这一点?

我还尝试在外键上使用nullblank

【问题讨论】:

    标签: django django-models django-rest-framework


    【解决方案1】:

    尝试发送以下内容:

    {
      "name":"Amsterdam 1",
      "location":"Amsterdam",
      "client":""
    }
    

    这将使您的客户端为空白,您已在 FixedLocation 模型中的 client 字段中启用它。您甚至可以使用"client":null 使其为空。

    如果你想更新一些东西,你需要包含它。当您进行部分更新并且不包含您要更新的字段时,它只会忽略丢失的字段并仅更新您在请求中发送的内容,即您只发送namelocation,因此只有那些会被更新和缺少的字段 client 将被忽略并保持原样。

    要了解nullblank 的用法,请查看此stackoverflow answer

    要了解部分更新的用法,请查看此 stackoverflow answer

    【讨论】:

      猜你喜欢
      • 2021-07-27
      • 2015-12-15
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2020-04-16
      • 2016-08-09
      • 1970-01-01
      • 2019-03-05
      相关资源
      最近更新 更多