Django Postgresql ArrayField聚合 [英] Django Postgresql ArrayField aggregation

查看:1210
本文介绍了Django Postgresql ArrayField聚合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的Django应用程序中,使用Postgresql,我有一个具有CharFields的ArrayField的模型。
我想知道是否有一种DB方式聚合并获取表中所有字符串的列表。例如:

In my Django application, using Postgresql, I have a model with an ArrayField of CharFields. I would like to know if there's a DB way to aggregate and get a list of all the strings in the table. For example:


  1. ['dog','cat']

  2. ['dog']

  3. ['cat']

会产生['dog','cat']

would yield ['dog', 'cat']

我知道如何在Python中执行此操作,但是想要找出一种在数据库级别聚合的方法。
使用Django 1.8.4

I know how to do that in Python but would like to find out a way to aggregate this on the DB level. Using Django 1.8.4

推荐答案

在PostgreSQL中,您可以执行以下操作:

In PostgreSQL you can do the following:

SELECT DISTINCT UNNEST(array_column) FROM the_table;

所以如果你的模型看起来像

So if your model looks something like

class TheModel(models.Model):
    # ...
    array_field = ArrayField(models.CharField(max_length=255, blank=True),\
                             default=list)
    # ...

Django的等价物是: / p>

the Django equivalent is:

TheModel.objects.annotate(arr_els=Func(F('array_field'), function='unnest'))\
                .values_list('arr_els', flat=True).distinct()

这篇关于Django Postgresql ArrayField聚合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆