Django model反向关联名称的方法


Posted in Python onDecember 15, 2018

如果你在 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来构造你的反向名称。如果你没有这样做,Django 就会在验证 model (或运行 migrate) 时抛出错误。

如果你没有在抽象基类中为某个关联字段定义 related_name 属性,那么默认的反向名称就是子类名称加上'_set',它能否正常工作取决于你是否在子类中定义了同名字段。例如,在上面的代码中,如果去掉 related_name属性,在 ChildA中,m2m 字段的反向名称就是 childa_set;而 ChildB的 m2m 字段的反向名称就是 childb_set。

以上这篇Django model反向关联名称的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中将阿拉伯数字转换成中文的实现代码
May 19 Python
Python通过正则表达式选取callback的方法
Jul 18 Python
python smtplib模块自动收发邮件功能(一)
May 22 Python
Tensorflow卷积神经网络实例
May 24 Python
Python利用递归实现文件的复制方法
Oct 27 Python
python爬虫之快速对js内容进行破解
Jul 09 Python
Python scrapy增量爬取实例及实现过程解析
Dec 24 Python
Python imutils 填充图片周边为黑色的实现
Jan 19 Python
Django获取model中的字段名和字段的verbose_name方式
May 19 Python
Python自动发送和收取邮件的方法
Aug 12 Python
python 多线程共享全局变量的优劣
Sep 24 Python
几款Python编译器比较与推荐(小结)
Oct 15 Python
django orm 通过related_name反向查询的方法
Dec 15 #Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
Dec 15 #Python
django 外键model的互相读取方法
Dec 15 #Python
Django之Mode的外键自关联和引用未定义的Model方法
Dec 15 #Python
python调用java的jar包方法
Dec 15 #Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
Dec 15 #Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
Dec 15 #Python
You might like
一个程序下载的管理程序(四)
2006/10/09 PHP
用PHP和ACCESS写聊天室(二)
2006/10/09 PHP
php页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
PHP获取文件的MD5值并判断是否被修改的例子
2014/06/19 PHP
PHP使用NuSOAP调用Web服务的方法
2015/07/18 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
Javascript的IE和Firefox兼容性汇编(zz)
2007/02/02 Javascript
javascript中的几个运算符
2007/06/29 Javascript
JavaScript URL参数读取改进版
2009/01/16 Javascript
JavaScript 对象、函数和继承
2009/07/07 Javascript
js下利用控制器载入对应脚本
2010/07/17 Javascript
JQuery仿小米手机抢购页面倒计时效果
2014/12/16 Javascript
JS弹出可拖拽可关闭的div层完整实例
2015/02/13 Javascript
10分钟掌握XML、JSON及其解析
2020/12/06 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
2018/05/25 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
详解如何在Vue里建立长按指令
2018/08/20 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
2019/06/14 Javascript
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
python实现串口通信的示例代码
2020/02/10 Python
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
行政办公员自我评价分享
2013/12/14 职场文书
《唯一的听众》教学反思
2014/02/20 职场文书
工作会议主持词
2014/03/17 职场文书
扬尘污染防治方案
2014/06/15 职场文书
体育口号大全
2014/06/18 职场文书
学校德育工作总结2015
2015/05/11 职场文书
音乐之声观后感
2015/06/04 职场文书
我的生日感言
2015/08/03 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
如何用threejs实现实时多边形折射
2021/05/07 Javascript