Meta classe em modelos Django

Vaibhav Vaibhav 29 junho 2021
Meta classe em modelos Django

Os metadados referem-se a um conjunto específico de dados que fornece informações sobre outros dados. No Django, usamos modelos Django para projetar as tabelas de nosso banco de dados e seus campos. Se tivermos que adicionar alguns dados sobre o próprio modelo, usamos a classe Meta. Descubra mais sobre a classe Meta nos modelos Django neste artigo.

a classe Meta em Django

A classe Meta é uma classe interna, o que significa que é definida dentro do modelo da seguinte maneira:

from django.db import models


class MyModel(models.Model):
    ...

    class Meta:
        ...

A classe Meta pode ser usada para definir várias coisas sobre o modelo como as permissões, nome do banco de dados, nomes no singular e no plural, abstração, ordenação, etc. Adicionar classes Meta aos modelos Django é totalmente opcional.

Esta classe também vem com muitas opções que você pode configurar. A seguir estão algumas das opções meta comumente usadas; você pode explorar todas as meta opções aqui

Django Meta Option - Resumo

Esta opção é usada para definir se o modelo é abstrato ou não; eles funcionam da mesma forma que classes abstratas. Classes abstratas são aquelas que não podem ser instanciadas e só podem ser estendidas ou herdadas.

Os modelos definidos como abstratos só podem ser herdados. Pode-se usar esta opção se houver vários modelos com campos comuns.

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)

Aqui, os modelos Teacher e Student terão todos os campos dentro do modelo Human. Dentro da base de dados, apenas os modelos Teacher e Student serão criados.

Django Meta Option - db_table

Esta opção é usada para definir o nome que deve ser usado para identificar a tabela dentro do banco de dados. Por exemplo: se eu fizer algo como segue, o nome do meu modelo será job no banco de dados.

from django.db import models


class JobPosting(models.Model):
    class Meta:
        db_table = "job"

Django Meta Option - Pedidos

Esta opção leva uma lista de valores de string, que são campos de modelo. É usado para definir a ordem dos objetos de um modelo. Quando os objetos deste modelo forem recuperados, eles estarão presentes nesta ordenação.

from django.db import models


class JobPosting(models.Model):
    dateTimeOfPosting = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ["-dateTimeOfPosting"]

No exemplo acima, os objetos recuperados serão ordenados com base no campo dateTimeOfPosting em ordem decrescente. (O prefixo - é usado para definir uma ordem decrescente.)

Django Meta Option - verbose_name

Esta opção é usada para definir um nome singular legível por humanos para um modelo e irá sobrescrever a convenção de nomenclatura padrão do Django. Este nome também será refletido no painel de administração (/admin/).

from django.db import models


class JobPosting(models.Model):
    class Meta:
        verbose_name = "Job Posting"

Django Meta Option - Verbose_name_plural

Esta opção é usada para definir um nome plural legível para um modelo, que novamente sobrescreverá a convenção de nomenclatura padrão do Django. Este nome também será refletido no painel de administração (/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.

Artigo relacionado - Django Model