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_namekan 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_nameatt vara (i prioritetsordning) detrelated_query_namesom användaren har angett, detrelated_namesom användaren har angett eller det namn som Django automatiskt genererar.Dolda fältkan inte hämtas med namn.Om ett fält med det angivna namnet inte hittas kommer ett
FieldDoesNotExistundantag 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äldrarTruesom standard. Inkluderar rekursivt fält som definierats i överordnade klasser. Om inställningen ärFalsekommerget_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_hiddenFalsesom standard. Om inställningen ärTruekommerget_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 keydefinieras på en modell kommer den att innehålla allafieldssom 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 keyi modellen.>>> User._meta.pk_fields [<django.db.models.fields.AutoField: id>]