国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Django model反向關聯名稱的方法

2020-02-16 00:09:51
字體:
來源:轉載
供稿:網友

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

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

‘%(class)s'會替換為子類的小寫加下劃線格式的名稱,字段在子類中使用。

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

from django.db import modelsclass Base(models.Model): m2m = models.ManyToManyField(OtherModel, related_name="%(app_label)s_%(class)s_related") class Meta: abstract = Trueclass ChildA(Base): passclass ChildB(Base): pass

ChildA.m2m 字段的反向名稱是 common_childa_related,而 ChildB.m2m 字段的反向名稱是 rare_childb_related。這取決于你如何使用 ‘%(class)s' 和'%(app_label)s來構造你的反向名稱。如果你沒有這樣做,Django 就會在驗證 model (或運行 migrate) 時拋出錯誤。

如果你沒有在抽象基類中為某個關聯字段定義 related_name 屬性,那么默認的反向名稱就是子類名稱加上'_set',它能否正常工作取決于你是否在子類中定義了同名字段。例如,在上面的代碼中,如果去掉 related_name屬性,在 ChildA中,m2m 字段的反向名稱就是 childa_set;而 ChildB的 m2m 字段的反向名稱就是 childb_set。

以上這篇Django model反向關聯名稱的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林站長站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄梅县| 中方县| 琼海市| 丰都县| 大石桥市| 黑龙江省| 武汉市| 平利县| 会宁县| 鹰潭市| 绥宁县| 同德县| 武陟县| 湄潭县| 邛崃市| 奉化市| 扎鲁特旗| 含山县| 凉城县| 天津市| 和田市| 上林县| 吴桥县| 漳州市| 太仓市| 濮阳市| 邻水| 石景山区| 潮安县| 镇安县| 大理市| 安达市| 南乐县| 建宁县| 杭锦旗| 本溪| 兴宁市| 靖江市| 宣城市| 玛沁县| 察隅县|