Django model反向關聯名稱的方法

2022-09-26 18:06:14 字數 1166 閱讀 2426

如果你在 foreignkey或 manytomanyfield欄位上使用 related_name屬性,你必須總是為該字段指定乙個唯一的反向名稱。但在抽象基類上這樣做就會引發乙個很嚴重的問題。因為 django 會將基類字段新增到每個子類當中,而每個子類的字段屬性值都完全相同 (這裡面就包括related_name)。

當你在(且僅在)抽象基類中使用 related_name 時,如果想繞過這個問題,名稱中就要包含'%(app_label)s'和 『%(class)s'。

『%(class)s'會替換為程式設計客棧子類的小寫加下劃線格式的名稱,欄位在子類中使用。

『%(app_label)s'會替換為應用的小寫加下劃線格式的名稱,應用包含子類。每個安裝的應用名稱都應該是唯一的,而且應用裡每個模型類的名稱也應該是唯一的,所以產生的名稱應該彼此不同。

from django.db import models

class base(models.model):

m2m = models.manytomanyfield(othermodel, related_name="%(app_label)s_%(class)s_related")

class meta:

abstract = true

class childa(base):

pass

class childb(base):

pass

childa.m2m 欄位的反向名稱是 common_childa_related,而 childb.m2m 欄位的反向名稱是 rare_childb_related。這取決於你如何使用 『%(class)s' 程式設計客棧和'%(app_label)s來構造你的反向名稱。如果你沒有這樣做,djanwww.cppcns.comgo 就會在驗證 model (或執行 migrate) 時丟擲錯誤。

如果你沒有在抽象基類中為某個關聯字段定義 related_name 屬性,那麼預設的反向名稱就是子類名稱加上'_set',它能否正常工作取決於你是否在子類中定義了同名字段。例如,在上面的**中,如果去掉 related_name屬性,在 childa中,m2m 欄位的反向名稱就是 childa_set;而 childb的 m2m 欄位的反向名稱就是 childb_set。

本文標題: django model反向關聯名稱的方法

本文位址: /jiaoben/python/247526.html

Django model欄位型別清單

django 通過 models 實現資料庫的建立 修改 刪除等操作,本文為模型中一般常用的型別的清單,便於查詢和使用 charfield.max length 字元的最大長度,django會根據這個引數在資料庫層和校驗層限制該字段所允許的最大字元數。auto now 當物件被儲存時,自動將該字段的...

Django model欄位型別清單

django 通過 models 實現資料庫的建立 修改 刪除等操作,本文為模型中一般常用的型別的清單,便於查詢和使用 charfield.max length 字元的最大長度,django會根據這個引數在資料庫層和校驗層限制該字段所允許的最大字元數。auto now 當物件被儲存時,自動將該字段的...

django model 資料型別

django 通過 models 實現資料庫的建立 修改 刪除等操作,本文為模型中一般常用的型別的清單,便於查詢和使用 charfield.max length 字元的最大長度,django會根據這個引數在資料庫層和校驗層限制該字段所允許的最大字元數。auto now 當物件被儲存時,自動將該字段的...