Модель _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/3.2/ref/models/meta/