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将ip地址转换成整数的方法
Mar 17 Python
解析Python中的二进制位运算符
May 13 Python
Python中splitlines()方法的使用简介
May 20 Python
举例讲解Python中的list列表数据结构用法
Mar 12 Python
Window10+Python3.5安装opencv的教程推荐
Apr 02 Python
对Tensorflow中的矩阵运算函数详解
Jul 27 Python
Pycharm设置去除显示的波浪线方法
Oct 28 Python
Python函数和模块的使用总结
May 20 Python
简单了解python代码优化小技巧
Jul 08 Python
Python替换月份为英文缩写的实现方法
Jul 15 Python
Django自定义用户表+自定义admin后台中的字段实例
Nov 18 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
Feb 26 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
SONY SRF-40W电路分析
2021/03/02 无线电
php 无限级数据JSON格式及JS解析
2010/07/17 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
2015/01/22 PHP
PHP处理数组和XML之间的互相转换
2016/06/02 PHP
PHP类的特性实例分析
2016/09/28 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
thinkphp5框架实现的自定义扩展类操作示例
2019/05/16 PHP
基于jquery的回到页面顶部按钮
2011/06/27 Javascript
浅析Node在构建超媒体API中的作用
2014/07/30 Javascript
JavaScript AJAX之惰性载入函数
2014/08/27 Javascript
基于jQuery实现最基本的淡入淡出效果实例
2015/02/02 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
layui框架中layer父子页面交互的方法分析
2017/11/15 Javascript
浅谈Vue2.0中v-for迭代语法的变化(key、index)
2018/03/06 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
JS实现的贪吃蛇游戏案例详解
2019/05/01 Javascript
layui表格分页 记录勾选的实例
2019/09/02 Javascript
layui的layedit富文本赋值方法
2019/09/18 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
Javascript Symbol原理及使用方法解析
2020/10/22 Javascript
python2.7和NLTK安装详细教程
2018/09/19 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
jupyter notebook 重装教程
2020/04/16 Python
Python插件机制实现详解
2020/05/04 Python
python 如何将office文件转换为PDF
2020/09/22 Python
python的scipy.stats模块中正态分布常用函数总结
2021/02/19 Python
Pytorch 中的optimizer使用说明
2021/03/03 Python
新加坡一家在线男士皮具品牌:Faire Leather Co.
2019/12/01 全球购物
QA工程师岗位职责
2013/11/20 职场文书
岗位职责范本
2013/11/23 职场文书
党政领导班子民主生活会整改措施
2014/09/18 职场文书
八项规定自查自纠报告及整改措施
2014/10/26 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
SpringCloud Function SpEL注入漏洞分析及环境搭建
2022/04/08 Java/Android