Spec-Zone.ru › Django 5.0

Модель _meta API

class Options

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

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

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

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

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

Options.get_field(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() будет включать поля, используемые для поддержки функциональности других полей. Это также будут включать любые поля, имеющие related_name (например, ManyToManyField или ForeignKey), которые начинаются с «+».
>>> 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 Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.0/ref/models/meta/

Spec-Zone.ru

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