# Django 5.2.8 documentation

# Modell `_meta` API

class Options

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)

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

      >>> 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)

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

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

New in Django 5.2.

Options.pk_fields

  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.

      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>]