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程序中操作MySQL的基本方法
Jul 29 Python
使用python读取txt文件的内容,并删除重复的行数方法
Apr 18 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
Nov 06 Python
python 输入一个数n,求n个数求乘或求和的实例
Nov 13 Python
对python3新增的byte类型详解
Dec 04 Python
python f-string式格式化听语音流程讲解
Jun 18 Python
python中列表的切片与修改知识点总结
Jul 23 Python
Django models.py应用实现过程详解
Jul 29 Python
python shutil文件操作工具使用实例分析
Dec 25 Python
python 实现端口扫描工具
Dec 18 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
Jan 27 Python
python 管理系统实现mysql交互的示例代码
Dec 06 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往windows中添加用户
2006/12/06 PHP
php 定界符格式引起的错误
2011/05/24 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
2016/01/11 PHP
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
总结对比php中的多种序列化
2016/08/28 PHP
JavaScript this 深入理解
2009/07/30 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
2015/10/21 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
JavaScript中匿名函数的用法及优缺点详解
2016/06/01 Javascript
jQuery实现右键菜单、遮罩等效果代码
2016/09/27 Javascript
JS中如何实现Laravel的route函数详解
2017/02/12 Javascript
Bootstrap模态框案例解析
2017/03/05 Javascript
js实现图片轮播效果学习笔记
2017/07/26 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
vue.js使用v-if实现显示与隐藏功能示例
2018/07/06 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
element-ui 表格数据时间格式化的方法
2018/08/24 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
运用js实现图层拖拽的功能
2019/05/24 Javascript
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
2019/06/14 Javascript
回顾Javascript React基础
2019/06/15 Javascript
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
vue 使用localstorage实现面包屑的操作
2020/11/16 Javascript
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
Python 快速实现CLI 应用程序的脚手架
2017/12/05 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
使用CSS Grid布局实现网格的流动
2014/12/30 HTML / CSS
优秀幼教自荐信
2014/02/03 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
2014最新预备党员思想汇报范文:中国梦,我的梦
2014/10/25 职场文书
小学教研工作总结2015
2015/05/13 职场文书
军训后的感想
2015/08/07 职场文书
Promise静态四兄弟实现示例详解
2022/07/07 Javascript