_meta¶La API del modelo _meta está en el núcleo del ORM de Django. Permite a otras partes del sistema, como las búsquedas, consultas, formularios y la administración, entender las capacidades de cada modelo. La API es accesible a través de la propiedad _meta de cada clase de modelo, que es una instancia de un objeto django.db.models.options.Options.
Los métodos y atributos que proporciona se pueden utilizar para:
Recuperar todas las instancias de campo de un modelo
Retrieve a single field instance of a modelo por nombre
Recuperar todos los campos que componen la clave primaria de un modelo
Devuelve la instancia del campo dado un nombre de campo.
field_name puede ser el nombre de un campo en el modelo, un campo en un modelo abstracto o heredado, o un campo definido en otro modelo que apunte al modelo. En el último caso, el field_name será (en orden de preferencia) el related_query_name establecido por el usuario, el related_name establecido por el usuario, o el nombre generado automáticamente por Django.
Los campos ocultos (Hidden fields) no pueden ser recuperados por nombre.
Si un campo con el nombre dado no se encuentra se levantará una excepción FieldDoesNotExist.
>>> from django.contrib.auth.models import User
# A field on the model
>>> User._meta.get_field("username")
<django.db.models.fields.CharField: username>
# A field from another model that has a relation with the current model
>>> User._meta.get_field("logentry")
<ManyToOneRel: admin.logentry>
# A non existent field
>>> User._meta.get_field("does_not_exist")
Traceback (most recent call last):
...
FieldDoesNotExist: User has no field named 'does_not_exist'
Devuelve una tupla de campos asociados a un modelo. get_fields() acepta dos parámetros que se pueden utilizar para controlar qué campos se devuelven:
include_parentsPor defecto, True. Incluye de forma recursiva los campos definidos en las clases padre. Si se establece a False, get_fields() solo buscará campos declarados directamente en el modelo actual. Los campos de modelos que heredan directamente de modelos abstractos o clases proxy se considerarán locales, no del padre.
include_hiddenPor defecto, False. Si se establece a True, get_fields() incluirá los campos ocultos (hidden fields) definidos en django.db.models.Field.hidden.
>>> from django.contrib.auth.models import User
>>> User._meta.get_fields()
(<ManyToOneRel: admin.logentry>,
<django.db.models.fields.AutoField: id>,
<django.db.models.fields.CharField: password>,
<django.db.models.fields.DateTimeField: last_login>,
<django.db.models.fields.BooleanField: is_superuser>,
<django.db.models.fields.CharField: username>,
<django.db.models.fields.CharField: first_name>,
<django.db.models.fields.CharField: last_name>,
<django.db.models.fields.EmailField: email>,
<django.db.models.fields.BooleanField: is_staff>,
<django.db.models.fields.BooleanField: is_active>,
<django.db.models.fields.DateTimeField: date_joined>,
<django.db.models.fields.related.ManyToManyField: groups>,
<django.db.models.fields.related.ManyToManyField: user_permissions>)
# Also include hidden fields.
>>> User._meta.get_fields(include_hidden=True)
(<ManyToOneRel: auth.user_groups>,
<ManyToOneRel: auth.user_user_permissions>,
<ManyToOneRel: admin.logentry>,
<django.db.models.fields.AutoField: id>,
<django.db.models.fields.CharField: password>,
<django.db.models.fields.DateTimeField: last_login>,
<django.db.models.fields.BooleanField: is_superuser>,
<django.db.models.fields.CharField: username>,
<django.db.models.fields.CharField: first_name>,
<django.db.models.fields.CharField: last_name>,
<django.db.models.fields.EmailField: email>,
<django.db.models.fields.BooleanField: is_staff>,
<django.db.models.fields.BooleanField: is_active>,
<django.db.models.fields.DateTimeField: date_joined>,
<django.db.models.fields.related.ManyToManyField: groups>,
<django.db.models.fields.related.ManyToManyField: user_permissions>)
Devuelve una lista con los campos que componen la clave primaria del modelo.
Cuando se define una clave primaria compuesta en un modelo, contendrá todos los campos referenciados por ella.
from django.db import models
class TenantUser(models.Model):
pk = models.CompositePrimaryKey("tenant_id", "id")
tenant_id = models.IntegerField()
id = models.IntegerField()
>>> TenantUser._meta.pk_fields
[
<django.db.models.fields.IntegerField: tenant_id>,
<django.db.models.fields.IntegerField: id>
]
En caso contrario, contendrá el campo único declarado como la clave primaria del modelo.
>>> User._meta.pk_fields
[<django.db.models.fields.AutoField: id>]
may 31, 2026