Metaclase en modelos Django
Los metadatos se refieren a un conjunto específico de datos que proporciona información sobre otros datos. En Django, usamos Django Models para diseñar las tablas de nuestra base de datos y sus campos. Si tenemos que agregar algunos datos sobre el modelo en sí, usamos la clase Meta
. Obtenga más información sobre la clase Meta
en los modelos de Django en este artículo.
La clase Meta
en Django
La clase Meta
es una clase interna, lo que significa que se define dentro del modelo de la siguiente manera:
from django.db import models
class MyModel(models.Model):
...
class Meta:
...
La clase Meta
se puede utilizar para definir varias cosas sobre el modelo, como los permisos, el nombre de la base de datos, los nombres en singular y plural, abstracción, ordenación, etc. Agregar clases Meta
a los modelos Django es completamente opcional.
Esta clase también viene con muchas opciones que puede configurar. Las siguientes son algunas de las metaopciones de uso común; puedes explorar todas las opciones meta aquí
Opción Meta de Django - Resumen
Esta opción se utiliza para definir si el modelo es abstracto o no; funcionan igual que las clases abstractas. Las clases abstractas son las que no se pueden instanciar y solo se pueden extender o heredar.
Los modelos que se establecen como abstractos solo se pueden heredar. Se puede utilizar esta opción si hay varios modelos con campos comunes.
from django.db import models
class Human(models.Model):
genders = (
("M", "Male"),
("F", "Female"),
("NB", "Non-binary"),
("T", "Transgender"),
("I", "Intersex"),
("O", "Other"),
("PNTS", "Prefer not to say"),
)
name = models.CharField(max_length=200)
age = models.IntegerField(default=0)
gender = models.CharField(max_length=50, choices=genders)
class Meta:
abstract = True # Important
class Teacher(Human):
subject = models.CharField(max_length=200)
class Student(Human):
grade = models.IntegerField(default=0)
Aquí, los modelos Teacher
y Student
tendrán todos los campos dentro del modelo Human
. Dentro de la base de datos solo se crearán los modelos Teacher
y Student
.
Opción Meta de Django - db_table
Esta opción se usa para establecer el nombre que se debe usar para identificar la tabla dentro de la base de datos. Por ejemplo: si hago algo de la siguiente manera, el nombre de mi modelo será job
en la base de datos.
from django.db import models
class JobPosting(models.Model):
class Meta:
db_table = "job"
Opción Meta de Django - Pedidos
Esta opción toma una lista de valores de cadena, que son campos de modelo. Se utiliza para definir el orden de los objetos de un modelo. Cuando se recuperen los objetos de este modelo, estarán presentes en este orden.
from django.db import models
class JobPosting(models.Model):
dateTimeOfPosting = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ["-dateTimeOfPosting"]
En el ejemplo anterior, los objetos recuperados se ordenarán según el campo dateTimeOfPosting
en orden descendente. (El prefijo -
se utiliza para definir un orden descendente).
Opción Meta de Django - verbose_name
Esta opción se usa para definir un nombre singular legible por humanos para un modelo y sobrescribirá la convención de nomenclatura predeterminada de Django. Este nombre también se reflejará en el panel de administración (/admin/
).
from django.db import models
class JobPosting(models.Model):
class Meta:
verbose_name = "Job Posting"
Opción Meta de Django - Verbose_name_plural
Esta opción se usa para definir un nombre plural legible por humanos para un modelo, que nuevamente sobrescribirá la convención de nomenclatura predeterminada de Django. Este nombre también se reflejará en el panel de administración (/admin/
).
from django.db import models
class JobPosting(models.Model):
class Meta:
verbose_name_plural = "Job Postings"