Modell _meta APILink to this heading

class OptionsLink to this definition

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åtkomstLink to this heading

Hämta en instans med ett enda fält i en modell med namnLink to this heading

Options.get_field(field_name)Link to this definition

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.

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å.

Python console
>>> 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 modellLink to this heading

Options.get_fields(include_parents=True, include_hidden=False)Link to this definition

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 ä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_hidden

False som standard. Om inställningen är True kommer get_fields() att inkludera hidden fields.

Python console
>>> 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 modellLink to this heading

Options.pk_fieldsLink to this definition

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 alla fields som den refererar till.

Python
from django.db import models


class TenantUser(models.Model):
    pk = models.CompositePrimaryKey("tenant_id", "id")
    tenant_id = models.IntegerField()
    id = models.IntegerField()
Python console
>>> 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.

Python console
>>> User._meta.pk_fields
[<django.db.models.fields.AutoField: id>]