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