在 Django 数据库中存储整数数组

问题描述 投票:0回答:6

在 django 数据库中存储整数数组的最佳方法是什么?

django django-models
6个回答
18
投票

我正在使用ArrayField:https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/fields/#querying-arrayfield

例如。

class Place(models.Model):
    nearby_places_ids = ArrayField(models.IntegerField(null=True, blank=True), null=True, blank=True)

使用方法:

place.nearby_places_ids = [1,2,3]
place.save()

models.Place.objects.filter(nearby_places_ids__contains=[1])
<QuerySet [<Place: Hostel DIC>]>

models.Place.objects.filter(nearby_places_ids__contains=[1,2,3,4])
<QuerySet []>

16
投票

仅适用于带有 Postgres DB 的 Django

您可以将 ArrayFieldbase_field IntegerField

一起使用

用于存储数据列表的字段。可以使用大多数字段类型,并且您可以传递另一个字段实例作为 base_field。您还可以指定尺寸。 ArrayField可以嵌套存储多维数组。

ArrayField(
    models.IntegerField(),
    blank=True,  # Optional: allows the array to be empty
    default=list  # Default value is an empty list
)

2018年起

自 Django 1.9 以来,

CommaSeparatedIntergerField
不再可用:

来自文档

自 1.9 版起已弃用:该字段已弃用,取而代之的是

CharField
与验证器=[validate_comma_separated_integer_list]。


默认情况下,它设置一个逗号分隔的整数列表字段。

int_list_validator

返回一个 RegexValidator 实例,确保字符串包含以下内容 以 sep 分隔的整数。当以下情况时它允许负整数 允许负数为真。

from django.db import models
from django.core.validators import int_list_validator


class YourModel(models.Model):
    ....
    ....
    int_list = models.CharField(validators=int_list_validator)   
    ....

9
投票

CommaSeparatedIntegerField立即浮现在我的脑海中。它在大多数数据库后端上以

VARCHAR
的形式实现。但可以肯定的是,您可能需要浏览一下
django/db/backends/*


6
投票

请参阅这个答案,了解 CommaSeparatedIntegerField 的可能替代版本的描述,它可以为您完成更多工作(从列表转换为字符串并返回)。也许你可以和那个人核实一下他是否已经写了:-)


5
投票

如果您使用 PostgreSQL,则可以本机存储数组类型。

参见示例:https://github.com/aino/django-arrayfieldshttps://github.com/ecometrica/django-dbarray


1
投票

使用ArrayField。语法如下:

from django.contrib.postgres.fields import ArrayField
class SampleModel(models.Model):
     my_integer_array =  ArrayField(
        models.IntegerField(),
         default= [1,1,0,0], blank=False,null = False, size = 4)

存储完整数组:

SampleModel.my_integer_array = [3,4,5,6]
SampleModel.save()

存储/更新单个元素:

SampleModel.my_integer_array[2] =7
SampleModel.save()

获取整个数组:

my_variable = SampleModel.my_integer_array

获取单个元素:

e = SampleModel.my_integer_array[3]

注意:ArrayField只能在使用postgreSQL作为数据库时使用

© www.soinside.com 2019 - 2024. All rights reserved.