Spec-Zone.ru › Django 6.0

API _meta модели

class Options [исходный код]

API _meta модели лежит в основе ORM Django. Он позволяет другим частям системы, таким как поиск, запросы, формы и административный интерфейс, понимать возможности каждой модели. Доступ к API осуществляется через атрибут _meta каждого класса модели, который является экземпляром объекта django.db.models.options.Options.

Предоставляемые им методы и атрибуты можно использовать, чтобы:

  • Получить все экземпляры полей модели
  • Получить экземпляр отдельного поля модели по имени
  • Получить все поля, составляющие первичный ключ модели

API доступа к полям

Получение экземпляра отдельного поля модели по имени

Options.get_field(field_name) [исходный код]

Возвращает экземпляр поля по его имени.

field_name может быть именем поля модели, полем абстрактной или унаследованной модели либо полем, определённым в другой модели, которая ссылается на эту модель. В последнем случае field_name будет (в порядке приоритета) значением related_query_name, заданным пользователем, значением related_name, заданным пользователем, или именем, автоматически сгенерированным Django.

Hidden fields нельзя получить по имени.

Если поле с указанным именем не найдено, будет вызвано исключение FieldDoesNotExist.

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

Получение всех экземпляров полей модели

Options.get_fields(include_parents=True, include_hidden=False) [исходный код]

Возвращает кортеж полей, связанных с моделью. get_fields() принимает два параметра, с помощью которых можно управлять тем, какие поля будут возвращены:

include_parents

По умолчанию — True. Рекурсивно включает поля, определённые в родительских классах. Если задано значение False, get_fields() будет искать только поля, объявленные непосредственно в текущей модели. Поля моделей, напрямую наследующих абстрактные модели или прокси-классы, считаются локальными, а не полями родительской модели.

include_hidden

По умолчанию — False. Если задано значение True, get_fields() будет включать 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>)

Получение полей, составляющих первичный ключ модели

Добавлено в Django 5.2.
Options.pk_fields [исходный код]

Возвращает список полей, составляющих первичный ключ модели.

Если в модели определён composite primary key, список будет содержать все объекты fields, на которые он ссылается.

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

В противном случае он будет содержать единственное поле, объявленное в качестве primary key модели.

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

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/6.0/ref/models/meta/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API