Metaclase en modelos Django

Vaibhav Vaibhav 4 diciembre 2021
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"
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

Artículo relacionado - Django Model