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 相关文章推荐
本地文件上传到七牛云服务器示例(七牛云存储)
Jan 11 Python
python爬虫常用的模块分析
Aug 29 Python
python实现线程池的方法
Jun 30 Python
python下读取公私钥做加解密实例详解
Mar 29 Python
Python基于回溯法子集树模板解决找零问题示例
Sep 11 Python
对python xlrd读取datetime类型数据的方法详解
Dec 26 Python
浅谈Python 列表字典赋值的陷阱
Jan 20 Python
Python任意字符串转16, 32, 64进制的方法
Jun 12 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
Jun 26 Python
pandas DataFrame运算的实现
Jun 14 Python
使用Nibabel库对nii格式图像的读写操作
Jul 01 Python
Python+logging输出到屏幕将log日志写入文件
Nov 11 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
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
PHP扩展安装方法步骤解析
2020/11/24 PHP
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
2016/04/06 Javascript
js实现为a标签添加事件的方法(使用闭包循环)
2016/08/02 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
jQuery Validation Engine验证控件调用外部函数验证的方法
2017/01/18 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
详解angularJS自定义指令间的相互交互
2017/07/05 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
Vue如何实现监听组件原生事件
2020/07/03 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
2014/04/26 Python
python中函数默认值使用注意点详解
2016/06/01 Python
把django中admin后台界面的英文修改为中文显示的方法
2019/07/26 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
PyTorch预训练的实现
2019/09/18 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
Python绘制K线图之可视化神器pyecharts的使用
2021/03/02 Python
css3实现图片遮罩效果鼠标hover以后出现文字
2013/11/05 HTML / CSS
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
Dodax奥地利:音乐、电影、书籍、玩具、电子产品等
2019/08/31 全球购物
英国在线滑雪板和冲浪商店:The Board Basement
2020/01/11 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
《中华少年》教学反思
2014/02/15 职场文书
《雷雨》教学反思
2014/02/20 职场文书
村党支部群众路线教育实践活动对照检查材料
2014/09/26 职场文书
商务考察邀请函模板
2015/02/02 职场文书
幼儿园迎新生欢迎词
2015/09/30 职场文书