相关文章推荐

如何在Django ORM的Qeryset Update上扩展一个数组或向数组字段追加一个值?[Postgresql]

1 人关注

我有一个ArrayField来存储Schema中给定菜品对象的颜色,菜品也有一个类别。

class Dish(models.Model):
   colors = ArrayField(models.CharField(max_length=16))
   category = models.CharField(max_length=32) 

假设我有15个菜品对象,其中13个属于 "厨具 "类别,其余2个属于 "装饰品"。

现在我想在一个单一的更新查询方法中为一个给定类别的现有颜色列表添加一个颜色(这必须将我的新颜色添加到所有匹配的菜肴的数组字段中,在我的例子中是13个项目)。

以下是我尝试执行这一操作的方法,但最终出现了错误

  • Dish.objects.filter(category="Cookware").update(colors=F("colors")+"red")

  • Dish.objects.filter(category="Cookware").update(colors=F("colors")+["red"])

    以下是我在尝试使用上述两个查询时遇到的错误信息 【替换代码3

    下面这句话显然不适用,因为应用 will return None Dish.objects.filter(category="Cookware").update(colors=F("colors").append("red"))

    PS。使用Django(3.2), Django ORM, PostgresArrayField from django.contrib.postgres.fields import ArrayField

    提前感谢您花时间帮助我解决这个问题。

  • python
    django
    postgresql
    Krishna Manohar
    Krishna Manohar
    发布于 2021-09-08
    1 个回答
    Glech
    Glech
    发布于 2021-09-09
    已采纳
    0 人赞同

    使用本地 django 字段是不可能的,因为 https://code.djangoproject.com/ticket/26355 仍然是开放的。要做到这一点,你可以使用 django-postgres-extensions 库。

    from django_postgres_extensions.models.fields import ArrayField
    class Dish(models.Model):
       colors = ArrayField(models.CharField(max_length=16))
       category = models.CharField(max_length=32)
    
     
    推荐文章