Storing an Integer Array in a Django Database

Viewed 21015

What is the best way to store an array of integers in a django database?

6 Answers

I'm using ArrayField: https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/fields/#querying-arrayfield

eg.

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

with usage:

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 []>

CommaSeparatedIntergerField is no more available since Django 1.9:

From Docs:

Deprecated since version 1.9: This field is deprecated in favor of CharField with validators=[validate_comma_separated_integer_list].


By default it sets a comma separated integer list field.

int_list_validator

Returns a RegexValidator instance that ensures a string consists of integers separated by sep. It allows negative integers when allow_negative is 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)   
    ....

Use ArrayField . Here's the syntax :

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)

To store a complete array :

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

To store/update a single element :

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

To fetch the entire array :

my_variable = SampleModel.my_integer_array

To fetch a single element :

e = SampleModel.my_integer_array[3]

Note : ArrayField can only be used when you are using postgreSQL as the database

Related