Django 从 PostgreSQL 特定的 ArrayField 中获取最小值和最大值,其中包含 IntegerField(s)

nik*_*itz 5 python django django-orm

我的模型中有一个ArrayField持有IntegerFields。我正在寻找可以从该数组中提取最小和最大整数的最佳方法。

Django 文档没有给出类似的例子,我想知道正确的方法是否是找出如何以及是否可以在这个 ArrayField 上使用聚合函数,或者我是否可以以某种方式将其转换为正常的 Python整数列表并使用内置最小,最大功能?

执行此操作的任何建议都会有所帮助。例子更多。

Mik*_*ike 5

Python 的 max 和 min 函数似乎可以做到。

型号定义:

from django.contrib.postgres.fields import ArrayField

class TestArrayField(models.Model):
    integers = ArrayField(
        models.IntegerField()
    )
Run Code Online (Sandbox Code Playgroud)

示例数据(两个TestArrayField模型实例,每个实例都有一个 数组IntegerFields):

在此处输入图片说明

这将返回给定实例的最小值/最大值TestArrayField

def test_array_field(request):
    # grabbing the first one, you could use .filter() instead
    integers_array = TestArrayField.objects.first().integers
    max_integer = max(integers_array)
    min_integer = min(integers_array)

    # printing output..
    print(integers_array)
    print('max_integer:', max_integer)
    print('min_integer:', min_integer)
Run Code Online (Sandbox Code Playgroud)

这是输出:

[6, 8, 10, 12]
max_integer: 12
min_integer: 6
Run Code Online (Sandbox Code Playgroud)