campo de matriz de Django
-
Use
ArrayField
para agregar una matriz unidimensional en los modelos de Django -
Use
ArrayField
para crear una matriz multidimensional en modelos 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
.
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.
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:
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:
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:
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:
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.