Django model反向关联名称的方法

作者:GrandG7 时间:2021-03-06 17:21:28 

如果你在 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。

来源:https://blog.csdn.net/GrandG7/article/details/79020279

标签:Django,model,关联,名称
0
投稿

猜你喜欢

  • SQL Server数据库连接中常见的错误分析

    2009-01-15 12:51:00
  • Python面向对象之反射/自省机制实例分析

    2022-07-27 06:57:53
  • oracle命令行删除与创建用户

    2008-01-02 17:01:00
  • Python使用微信接入图灵机器人过程解析

    2022-05-29 04:03:14
  • OverFlow – 一个秘密武器

    2010-09-25 12:51:00
  • ASP用户登录模块的设计源码

    2008-10-03 12:16:00
  • 数据安全之MySQL安全的二十三条军规

    2008-12-24 16:26:00
  • PHP之深入学习Yii2缓存Cache组件详细讲解

    2023-06-29 17:37:20
  • JavaScript的目的及历史

    2007-10-17 18:53:00
  • 段正淳的css笔记(5)未知图片垂直居中的方法

    2007-11-01 22:06:00
  • python 爬虫百度地图的信息界面的实现方法

    2021-11-10 20:29:35
  • 显示ASP页面源码的代码

    2008-10-12 13:05:00
  • Python实现读取TXT文件数据并存进内置数据库SQLite3的方法

    2021-03-01 14:14:27
  • Python基于回溯法子集树模板解决野人与传教士问题示例

    2023-07-14 04:36:05
  • 如何在js中使用FileSystemObject(fso)

    2007-09-23 09:10:00
  • asp简单可逆运算字符串加密解密函数

    2010-05-04 16:42:00
  • Python爬虫信息输入及页面的切换方法

    2023-08-02 17:33:33
  • go语言interface接口继承多 态示例及定义 解析

    2023-10-14 02:49:27
  • XHTML与HTML之间的7个区别

    2009-05-20 10:13:00
  • WEB2.0网页制作标准教程(10)自适应高度

    2008-02-19 19:21:00
  • asp之家 网络编程 m.aspxhome.com