Хранение целочисленного массива в базе данных Django - PullRequest
9 голосов
/ 15 сентября 2009

Каков наилучший способ хранения массива целых чисел в базе данных django?

Ответы [ 5 ]

9 голосов
/ 15 сентября 2009

CommaSeparatedIntegerField приходит на ум мгновенно. Он реализован как VARCHAR в большинстве баз данных. Хотя, чтобы быть уверенным, вы можете просмотреть django/db/backends/*.

6 голосов
/ 01 февраля 2018

CommaSeparatedIntergerField больше не доступен с Django 1.9:

Из документов :

Устаревший с версии 1.9: Это поле устарело в пользу CharField с валидаторами = [validate_comma_separated_integer_list].


По умолчанию устанавливается поле списка целых чисел, разделенных запятыми.

int_list_validator

Возвращает экземпляр RegexValidator, который гарантирует, что строка состоит из целые числа, разделенные сент. Это позволяет отрицательные целые числа, когда 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)   
    ....
6 голосов
/ 16 сентября 2009

См. этот ответ для описания возможной альтернативной версии CommaSeparatedIntegerField, которая сделает больше за вас (преобразование из списка в строку и обратно). Может быть, вы могли бы проверить с этим парнем о том, написал ли он это уже: -)

3 голосов
/ 10 сентября 2012

Если вы используете PostgreSQL, вы можете хранить типы массивов изначально.

См. Например: https://github.com/aino/django-arrayfields и https://github.com/ecometrica/django-dbarray

2 голосов
/ 25 сентября 2018

Я использую 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 []>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...