Model _meta API

class Options[原始碼]

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

include_hidden

預設為 False。如果設定為 Trueget_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>)
回到頂部