campo de matriz de Django

Shubham Vora 15 febrero 2024
  1. Use ArrayField para agregar una matriz unidimensional en los modelos de Django
  2. Use ArrayField para crear una matriz multidimensional en modelos Django
campo de matriz de Django

El ArrayField en Django es similar a una estructura de datos de matriz en otros lenguajes de programación como Java, C, C++, etc. Almacena múltiples valores del mismo tipo de datos.

Antes de continuar con Arrayfield en Django, el usuario debe confirmar que está utilizando PostgreSQL como base de datos porque la base de datos SQLite no es compatible con Arrayfield.

Para configurar la base de datos PostgreSQL, los usuarios deben ejecutar el servidor de PostgreSQL localmente. Después de eso, para conectarlo con Django, en el archivo settings.py de la aplicación, los usuarios deben cambiar la matriz DATABASES, como se muestra a continuación.

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": "<DATABASES_name>",
        "USER": "<USER_name>",
        "PASSWORD": "<PASSWORD_of_user>",
        "HOST": "localhost",
        "PORT": "5432",
    }
}

En la siguiente imagen, los usuarios pueden ver cómo hemos configurado PostgreSQL en el archivo settings.py.

configuración de django postgresql

Use ArrayField para agregar una matriz unidimensional en los modelos de Django

En esta sección, usaremos el ArrayField para agregar una matriz de valores al modelo de Django. El siguiente ejemplo demuestra el uso de ArrayField para crear la matriz de TextField.

from django.db import models
from django.contrib.postgres.fields import ArrayField


class ResearchPaper(models.Model):
    paperName = models.CharField(max_length=200)
    author = ArrayField(models.CharField(max_length=200), blank=True)

    def __str__(self):
        return self.paperName

Hemos creado el modelo Django para el ResearchPaper en el código de Python anterior. Contiene los campos paperName y Autores.

El campo paperName es el campo normal de caracteres, pero puede haber varios autores para un solo artículo, por lo que hemos utilizado ArrayField para crear el campo Autores.

Una vez que agregamos el modelo en el archivo models.py, tenemos que registrar el modelo. Para registrar el modelo, cree admin.py si no existe, y agregue el siguiente código al archivo.

from .models import ResearchPaper

admin.site.register(ResearchPaper)

Después de registrar el modelo, los usuarios deben migrar el modelo a la base de datos. Para eso, los usuarios deben ejecutar el siguiente comando en la terminal uno por uno.

python manage.py makemigrations <app_name>
python manage.py migrate

Ahora, aprenderemos a consultar los datos del ArrayField según su valor.

Antes de comenzar a consultar los datos de la tabla ResearchPaper, agreguemos algunos datos.

ResearchPaper.objects.create(paperName="First paper", author=["Alice", "Bob", "jenny"])
ResearchPaper.objects.create(paperName="Second paper", author=["Alice"])
ResearchPaper.objects.create(paperName="Third paper", author=["Bob"])
ResearchPaper.objects.create(paperName="Fourth paper", author=["Alice", "Bob"])
ResearchPaper.objects.create(paperName="Fifth paper", author=["Bob", "jenny"])

Por lo tanto, hemos agregado algunos registros de trabajos de investigación con diferentes autores. Además, algunos artículos tienen varios autores y un solo autor ha escrito varios artículos.

En el siguiente gif, podemos ver que los datos se agregan a la base de datos.

django arrayfield agregar datos

Utilice la búsqueda contiene

La búsqueda “contiene” devuelve todos los registros cuyos valores de búsqueda son un subconjunto de los datos de ArrayField.

Código de ejemplo:

ResearchPaper.objects.filter(
    author__contains=["Alice"]
)  # returns <QuerySet [<ResearchPaper: First paper>, <ResearchPaper: Second paper>, <ResearchPaper: Fourth paper>]>
ResearchPaper.objects.filter(
    author__contains=["Alice", "Bob"]
)  # returns <QuerySet [<ResearchPaper: First paper>, <ResearchPaper: Fourth paper>

Producción:

El campo de matriz Django contiene

Utilice la búsqueda contenido_por

La búsqueda contenido_por es la inversa de la búsqueda contiene. Devuelve todos los registros cuyos datos son un subconjunto de valores de búsqueda.

Código de ejemplo:

ResearchPaper.objects.filter(
    author__contained_by=["Alice"]
)  # returns <QuerySet [<ResearchPaper: Second paper>]>
ResearchPaper.objects.filter(
    author__contained_by=["Alice", "Bob"]
)  # returns <QuerySet [<ResearchPaper: Second paper>, <ResearchPaper: Third paper>, <ResearchPaper: Fourth paper>]>

Producción:

django arrayfield contenido_por

Utilice la búsqueda superpuesta

La búsqueda de superposición devuelve todos los registros cuyos datos contienen valores de búsqueda únicos o múltiples.

Código de ejemplo:

ResearchPaper.objects.filter(
    author__overlap=["Alice"]
)  # returns <QuerySet [<ResearchPaper: Second paper>, <ResearchPaper: Fourth paper>]>
ResearchPaper.objects.filter(
    author__overlap=["Alice", "jenny"]
)  # returns <QuerySet [<ResearchPaper: Second paper>, <ResearchPaper: Fourth paper>, <ResearchPaper: Fifth paper>]>

Producción:

superposición de campo de matriz de django

Utilice la búsqueda len

La búsqueda len comprueba la longitud de los datos y devuelve todos los registros cuya longitud es equivalente al valor de la búsqueda len.

Código de ejemplo:

ResearchPaper.objects.filter(
    author__len=1
)  # returns <QuerySet [<ResearchPaper: Second paper>, <ResearchPaper: Third paper>]>
ResearchPaper.objects.filter(
    author__len=3
)  # returns <QuerySet [<ResearchPaper: First paper>]>

Producción:

django arrayfield len

De esta manera, podemos usar diferentes búsquedas para consultar los registros según los valores de ArrayField.

Use ArrayField para crear una matriz multidimensional en modelos Django

Es posible que los usuarios necesiten crear arreglos bidimensionales en los modelos de Django, y los usuarios pueden lograrlo usando el ArrayField. Aquí, hemos escrito el código básico para crear una matriz bidimensional en Django.

from django.db import models
from django.contrib.postgres.fields import ArrayField


class ResearchPaper(models.Model):
    paperName = models.TextField()
    Authors = ArrayField(
        ArrayField(
            models.TextField(blank=True),
        )
    )

En este artículo, hemos aprendido a crear arreglos únicos y multidimensionales en campos de Django. Además, hemos aprendido a utilizar las diferentes búsquedas para consultar los registros según los valores de ArrayField.

Los usuarios pueden consultar los registros de la matriz bidimensional como una matriz unidimensional.

Shubham Vora avatar Shubham Vora avatar

Shubham is a software developer interested in learning and writing about various technologies. He loves to help people by sharing vast knowledge about modern technologies via different platforms such as the DelftStack.com website.

LinkedIn GitHub