Skip to main content

PostgreSQL array field for Django.

Introduction

Django by default, has a large collection of possible types that can be used to define the model. But sometimes we need to use some more complex types offered by PostgreSQL. In this case, we will look the integrating of PostgreSQL array with Django.

Quickstart

djorm-ext-pgarray exposes a simple django model field djorm_pgarray.fields.ArrayField. This accepts two additional parameters: dbtype that represents a postgresql type, and dimension that represents a dimension of array field.

This is a sample definition of model using a ArrayField:

from django.db import models
from djorm_pgarray.fields import ArrayField
from djorm_expressions.models import ExpressionManager

class Register(models.Model):
    name = models.CharField(max_length=200)
    points = ArrayField(dbtype="int")
    objects = ExpressionManager()

class Register2(models.Model):
    name = models.CharField(max_length=200)
    texts = ArrayField(dbtype="text", dimension=2) # this creates `points text[][]` postgresql field.
    objects = ExpressionManager()

Creating objects

This is a sample example of creating objects with array fields.

>>> Register.objects.create(points = [1,2,3,4])
<Register: Register object>
>>> Register2.objects.create(texts = [['Hello', 'World'], ['Hola', 'Mundo']])
<Register2: Register2 object>

Using custom PostgreSQL data types

Some times we need use some other data types that postgresql offers for make arrays and djorm-ext-pgarray does not offers builtin support for it. Now, djorm-ext-pgarray supports a simple way to extend it:

class Register(models.Model):
    name = models.CharField(max_length=200)
    macs = ArrayField(dbtype="macaddr", type_cast=lambda x: str(x))
    # Same as previous line but uses str as callback directly
    # macs = ArrayField(dbtype="macaddr", type_cast=str)
    objects = ExpressionManager()

If type_cast patameter is not None, ArrayField ignores the no existence of a builtin cast function for some type and use a function passed throught type_cast argument.

How install it?

You can clone the repo from github and install with simple python setup.py install command. Or use a pip, for install it from Python Package Index.

pip install djorm-ext-pgarray

Additionally, you can install djorm-ext-expressions, that can help with complex queries using array fields.

Known issues

  • Querysets using expressions package can not be used as subqueries. Because alias propagation is not working properly.

Metadata

Release files for djorm-ext-pgarray 0.10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for djorm-ext-pgarray 0.10
File Size Uploaded
djorm-ext-pgarray-0.10.tar.gz 3.7 kB Details

Release files / djorm-ext-pgarray-0.10.tar.gz

Download URL djorm-ext-pgarray-0.10.tar.gz
Size 3.7 kB
Tags Source
SHA-256 checksum
How to use checksums
9acc45d315ac26d307fb79b75cec1d56cdff27d673a52606c17d6ab7ceb14123
BLAKE2b-256 checksum
How to use checksums
3f3d0cfd4b6a0e8611879fb3ba6825a9d5182dbd10e591a9dac06de51b41d67b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.10 This release

1 release file

0.9

1 release file

0.8

1 release file

0.7

1 release file

0.6

1 release file

0.5

1 release file

0.4.2

1 release file

0.4.1

1 release file

0.4.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page