_meta API¶Modellens API _meta är kärnan i Django ORM. Det gör det möjligt för andra delar av systemet som uppslagningar, frågor, formulär och administratören att förstå kapaciteten hos varje modell. API:et är tillgängligt via attributet _meta i varje modellklass, som är en instans av ett django.db.models.options.Options-objekt.
Metoder och attribut som den tillhandahåller kan användas för att:
Hämta alla fältinstanser för en modell
Hämta en instans med ett enda fält i en modell med namn
Hämta alla fält som utgör primärnyckeln i en modell
Returnerar fältinstansen när ett namn på ett fält anges.
field_name kan vara namnet på ett fält i modellen, ett fält i en abstrakt eller ärvd modell, eller ett fält som definieras i en annan modell som pekar på modellen. I det senare fallet kommer field_name att vara (i prioritetsordning) det related_query_name som användaren har angett, det related_name som användaren har angett eller det namn som Django automatiskt genererar.
Hidden fields, fields with hidden=True, cannot be retrieved by name.
Om ett fält med det angivna namnet inte hittas kommer ett FieldDoesNotExist undantag att uppstå.
>>> 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'
Returnerar en tupel av fält som är associerade med en modell. get_fields() accepterar två parametrar som kan användas för att styra vilka fält som returneras:
inkludera_föräldrarTrue som standard. Inkluderar rekursivt fält som definierats i överordnade klasser. Om inställningen är False kommer get_fields() endast att söka efter fält som deklarerats direkt i den aktuella modellen. Fält från modeller som direkt ärver från abstrakta modeller eller proxyklasser anses vara lokala, inte i den överordnade klassen.
include_hiddenFalse by default. If set to True, get_fields() will include
fields with hidden=True.
>>> 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>)
Returnerar en lista över de fält som utgör primärnyckeln i en modell.
When a CompositePrimaryKey is defined on a model
it will contain all the fields referenced by it.
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>
]
Otherwise it will contain the single field declared as the primary key of
the model, either explicitly with primary_key=True or implicitly as the automatic
primary key.
>>> User._meta.pk_fields
[<django.db.models.fields.AutoField: id>]
aug. 05, 2026