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

Chr*_*ian 10 django django-models

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

aya*_*yaz 9

CommaSeparatedIntegerField立即浮现在脑海中.它实现为VARCHAR大多数数据库后端.可以肯定的是,你可能想要浏览一下django/db/backends/*.

  • 这是超级过时的信息.您链接的当前开发(也不是当前版本:[v1.11](https://docs.djangoproject.com/en/1.11/ref/models/fields/#commaseparatedintegerfield))站点未提及CommaSeparatedIntegerField . (7认同)

Nab*_*med 7

CommaSeparatedIntergerField 自Django 1.9起不再可用:

从文档

从1.9版开始不推荐使用:建议CharField使用validators = [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)   
    ....
Run Code Online (Sandbox Code Playgroud)

  • 它应该类似于`models.CharField(validators = [int_list_validator],max_length = 100)`之类的东西。 (2认同)

Car*_*yer 6

有关CommaSeparatedIntegerField的可能替代版本的说明,请参阅此答案,该版本将为您完成更多工作(从列表转换为字符串并返回).也许你可以和那个人一起检查他是否已经写过:-)


spe*_*edy 5

我正在使用 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)
Run Code Online (Sandbox Code Playgroud)

用法:

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 []>
Run Code Online (Sandbox Code Playgroud)