Django model反向关联名称的方法

 更新时间:2018年12月15日 15:40:11   作者:GrandG7  
今天小编就为大家分享一篇Django model反向关联名称的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

如果你在 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网络爬虫之爬取微博热搜

    这篇文章主要介绍了Python网络爬虫之爬取微博热搜的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • python构建自定义回调函数详解

    python构建自定义回调函数详解

    在工作中,回调函数使用的场景是非常多的,下面我们就来通过例子程序来详细了解利用了Python的属性机制构建了一个自定义回调函数的使用
    2017-06-06
  • 深度学习详解之初试机器学习

    深度学习详解之初试机器学习

    机器学习可应用在各个方面,本篇将在系统性进入机器学习方向前,初步认识机器学习,利用线性回归预测波士顿房价,让我们一起来看看吧
    2021-04-04
  • 使用Python一键提取PDF中的表格到Excel的方法详解

    使用Python一键提取PDF中的表格到Excel的方法详解

    从PDF文件获取表格中的数据,也是日常办公容易涉及到的一项工作,一个一个复制吧,效率确实太低了,用Python从PDF文档中提取表格数据,并写入Excel文件,灰常灰常高效,本文就给大家介绍一下如何使用Python一键提取PDF中的表格到Excel,需要的朋友可以参考下
    2023-08-08
  • 如何利用python检测图片是否包含二维码

    如何利用python检测图片是否包含二维码

    这篇文章主要介绍了如何利用python检测图片是否包含二维码,帮助大家更好的利用python处理图片,感兴趣的朋友可以了解下
    2020-10-10
  • Python matplotlib超详细教程实现图形绘制

    Python matplotlib超详细教程实现图形绘制

    matplotlib 模块不仅提供了绘制统计图表的功能,还支持绘制圆形、正方形、矩形等各种图形。这篇文章主要为大家详细介绍了利用matplotlib.patches 绘制一些基本图形,快来跟随小编一起学习吧
    2021-12-12
  • 手把手教你Windows如何在cmd中切换python版本

    手把手教你Windows如何在cmd中切换python版本

    通常在Windows系统下我们可能安装了多个Python版本,那么该如何进行版本的切换呢?下面这篇文章主要给大家介绍了关于Windows如何在cmd中切换python版本的相关资料,需要的朋友可以参考下
    2023-04-04
  • Python实现购物车购物小程序

    Python实现购物车购物小程序

    这篇文章主要为大家详细介绍了Python实现购物车购物小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • python动态参数用法实例分析

    python动态参数用法实例分析

    这篇文章主要介绍了python动态参数用法,以实例形式较为详细的分析了Python中动态参数的功能及使用技巧,需要的朋友可以参考下
    2015-05-05
  • 怎样在Pandas DataFrame列中搜索值

    怎样在Pandas DataFrame列中搜索值

    这篇文章主要介绍了怎样在Pandas DataFrame列中搜索值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09

最新评论