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

时间:2009-09-15 19:52:26

标签: django django-models

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

5 个答案:

答案 0 :(得分:9)

CommaSeparatedIntegerField立即浮现在脑海中。它在大多数数据库后端上实现为VARCHAR。但是,您可能希望浏览django/db/backends/*

答案 1 :(得分:6)

有关可能为您完成更多工作(从列表转换为字符串并返回)的可能替代版本的CommaSeparatedIntegerField的说明,请参阅this answer。也许你可以告诉那个人他是否已经写过: - )

答案 2 :(得分:5)

自Django 1.9以来

CommaSeparatedIntergerField已不再可用:

From Docs

  

从版本1.9开始不推荐使用:不赞成使用此字段   CharField有验证者= [validate_comma_separated_integer_list]。

默认设置逗号分隔的整数列表字段。

  

int_list_validator

     

返回一个RegexValidator实例,该实例确保字符串由   由sep分隔的整数。它允许负整数   allow_negative为True。

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)   
    ....

答案 3 :(得分:0)

我正在使用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 []>

答案 4 :(得分:0)

使用 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用作数据库时可以使用