API _meta моделей

класс Options

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

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

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

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

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

Options.get_field( имя_поля )

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

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

Не может быть восстановлена по имени.champs cachés

Если поле с указанным именем не найдено, генерируется исключение 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>)

Copyright ©2020 All rights reserved