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"