API _meta модели
-
class Options[исходный код]
API _meta модели лежит в основе ORM Django. Он позволяет другим частям системы, таким как поиск, запросы, формы и административный интерфейс, понимать возможности каждой модели. Доступ к API осуществляется через атрибут _meta каждого класса модели, который является экземпляром объекта django.db.models.options.Options.
Предоставляемые им методы и атрибуты можно использовать, чтобы:
- Получить все экземпляры полей модели
- Получить экземпляр отдельного поля модели по имени
- Получить все поля, составляющие первичный ключ модели
API доступа к полям
Получение экземпляра отдельного поля модели по имени
-
Options.get_field(field_name)[исходный код] -
Возвращает экземпляр поля по его имени.
field_nameможет быть именем поля модели, полем абстрактной или унаследованной модели либо полем, определённым в другой модели, которая ссылается на эту модель. В последнем случае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()будет включатьhidden fields.
>>> 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>)
-
Получение полей, составляющих первичный ключ модели
-
Options.pk_fields[исходный код] -
Возвращает список полей, составляющих первичный ключ модели.
Если в модели определён
composite primary key, список будет содержать все объектыfields, на которые он ссылается.from django.db import models class TenantUser(models.Model): pk = models.CompositePrimaryKey("tenant_id", "id") tenant_id = models.IntegerField() id = models.IntegerField()>>> TenantUser._meta.pk_fields [ <django.db.models.fields.IntegerField: tenant_id>, <django.db.models.fields.IntegerField: id> ]В противном случае он будет содержать единственное поле, объявленное в качестве
primary keyмодели.>>> User._meta.pk_fields [<django.db.models.fields.AutoField: id>]
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/6.0/ref/models/meta/