Model _meta
API¶
模型 _meta
API 是 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_parents
預設為
True
。遞迴包含在父類上定義的欄位。如果設定為False
,get_fields()
將僅搜索直接在當前模型上宣告的欄位。直接從抽象模型或代理類繼承的模型的欄位被認為是本地欄位,而不是父模型上的欄位。include_hidden
預設為
False
。如果設定為True
,get_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>)