API модели _meta¶
- class Options¶
API модели _meta лежит в основе Django ORM. Это позволяет другим частям системы, таким как поиск, запросы, формы и администратор, понять возможности каждой модели. API доступен через атрибут _meta каждого класса модели, который является экземпляром объекта django.db.models.options.Options.
Предоставляемые им методы можно использовать для:
Получить все экземпляры полей модели
Получить один экземпляр поля модели по имени
API доступа к полям¶
Получение одного экземпляра поля модели по имени¶
- Options.get_field(field_name)¶
Возвращает экземпляр поля с именем поля.
field_nameможет быть именем поля в модели, поля в абстрактной или унаследованной модели или поля, определенного в другой модели, которое указывает на эту модель. В последнем случаеfield_nameбудет (в порядке предпочтения)related_query_name, заданным пользователем,related_name, установленным пользователем, или именем, автоматически сгенерированным Django.Скрытые поляне могут быть получены по имени.Если поле с заданным именем не найдено, будет создано исключение
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_parentsTrueпо умолчанию. Рекурсивно включает поля, определенные в родительских классах. Если установлено значение False, get_fields() будет искать только поля, объявленные непосредственно в текущей модели. Поля моделей, которые напрямую наследуются от абстрактных моделей или прокси-классов, считаются локальными, а не родительскими.include_hiddenFalseby default. If set toTrue,get_fields()will include fields that are used to back other field’s functionality. This will also include any fields that have arelated_name(such asManyToManyField, orForeignKey) that start with a «+».
>>> 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>)