Modell _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
API för fältåtkomst¶
Hämta en instans med ett enda fält i en modell med namn¶
- Options.get_field(field_name)[source]¶
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 kommerfield_name
att vara (i prioritetsordning) detrelated_query_name
som användaren har angett, detrelated_name
som användaren har angett eller det namn som Django automatiskt genererar.Dolda fält
kan inte hämtas med namn.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'
Hämtar alla fältinstanser av en modell¶
- Options.get_fields(include_parents=True, include_hidden=False)[source]¶
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äldrar
True
som standard. Inkluderar rekursivt fält som definierats i överordnade klasser. Om inställningen ärFalse
kommerget_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_hidden
False
som standard. Om inställningen ärTrue
kommerget_fields()
att inkluderahidden fields
.
>>> 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>)
Hämta fält som utgör primärnyckeln i en modell¶
- Options.pk_fields[source]¶
Returnerar en lista över de fält som utgör primärnyckeln i en modell.
När en
composite primary key
definieras på en modell kommer den att innehålla allafields
som den refererar till.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> ]
Annars kommer det att innehålla det enda fält som deklarerats som
primary key
i modellen.>>> User._meta.pk_fields [<django.db.models.fields.AutoField: id>]