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正则表达式判断字符串是否是全部小写示例
Dec 25 Python
在GitHub Pages上使用Pelican搭建博客的教程
Apr 25 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
Oct 13 Python
wxpython中Textctrl回车事件无效的解决方法
Jul 21 Python
python如何压缩新文件到已有ZIP文件
Mar 14 Python
django 快速启动数据库客户端程序的方法示例
Aug 16 Python
Python使用APScheduler实现定时任务过程解析
Sep 11 Python
浅析python redis的连接及相关操作
Nov 07 Python
django有外键关系的两张表如何相互查找
Feb 10 Python
Python基于stuck实现scoket文件传输
Apr 02 Python
Python实现像awk一样分割字符串
Sep 15 Python
python pip如何手动安装二进制包
Sep 30 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 GD绘制24小时柱状图
2008/06/28 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
2013/06/24 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
2014/06/21 PHP
php生成图片验证码的方法
2016/04/15 PHP
细品javascript 寻址,闭包,对象模型和相关问题
2009/04/27 Javascript
js取模(求余数)隔行变色
2014/05/15 Javascript
分享20款美化网站的 jQuery Lightbox 灯箱插件
2014/10/10 Javascript
Jquery树插件zTree用法入门教程
2015/02/17 Javascript
nodejs导出excel的方法
2015/06/30 NodeJs
JS+CSS实现简易实用的滑动门菜单效果
2015/09/18 Javascript
详解Node.Js如何处理post数据
2016/09/19 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
jquery pagination分页插件使用详解(后台struts2)
2017/01/22 Javascript
jQuery学习之DOM节点的插入方法总结
2017/01/22 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
React通过redux-persist持久化数据存储的方法示例
2019/02/14 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
Vue循环中多个input绑定指定v-model实例
2020/08/31 Javascript
浅谈js数组splice删除某个元素爬坑
2020/10/14 Javascript
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
python hbase读取数据发送kafka的方法
2018/12/27 Python
Django的models中on_delete参数详解
2019/07/16 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
2019/07/23 Python
Python填充任意颜色,不同算法时间差异分析说明
2020/05/16 Python
会计专业毕业生推荐信
2013/11/05 职场文书
道路交通安全实施方案
2014/03/12 职场文书
幼儿园评语大全
2014/04/17 职场文书
工作失职检讨书
2015/01/26 职场文书
校运会广播稿
2015/08/19 职场文书
2016基督教会圣诞节开幕词
2016/03/04 职场文书
文明医院的标语集锦!
2019/07/24 职场文书
如何利用python实现Simhash算法
2022/06/28 Python