Django 解决model 反向引用中的related_name问题
问题:
定义表Apple:
class Apple( models.Model): origin_level = models.ForeignKey(AppleLevel) new_level = models.ForeignKey(AppleLevel)
出现如下问题:
monitor.apple: Accessor for field ‘origin_level’ clashes with related field ‘AppleLevel.apple_set’. Add a related_name argument to the definition for ‘origin_level’.
monitor.apple: Accessor for field ‘new_level’ clashes with related field ‘AppleLevel.apple_set’. Add a related_name argument to the definition for ‘new_level’.
原因:
一个数据表同时两次外键引用另一个表,出现重名问题。
解决办法:
使用related_name属性定义名称(related_name是关联对象反向引用描述符)。
具体修改代码如下:
class Apple( models.Model): origin_level = models.ForeignKey(AppleLevel, related_name=’orgin_level_appleset’) new_level = models.ForeignKey(AppleLevel, related_name=’new_level_appleset’)
related_name使用之后,有什么用处呢?
用处就是:
通过AppleLevel可以得到引用自身的Apple对象。
例如,
通过origin_level引用AppleLevel 中id为12的Apple的所有对象
AppleLevel.object.get(id=12).origin_level_appleset.objects.all()
通过new_level引用AppleLevel 中id为12的Apple的所有对象
AppleLevel.object.get(id=12).new_level_appleset.objects.all()
以上这篇Django 解决model 反向引用中的related_name问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持好吧啦网。
相关文章:
1. vue-drag-chart 拖动/缩放图表组件的实例代码2. vue使用moment如何将时间戳转为标准日期时间格式3. Android studio 解决logcat无过滤工具栏的操作4. 什么是Python变量作用域5. js select支持手动输入功能实现代码6. PHP正则表达式函数preg_replace用法实例分析7. Android Studio3.6.+ 插件搜索不到终极解决方案(图文详解)8. bootstrap select2 动态从后台Ajax动态获取数据的代码9. Android 实现彻底退出自己APP 并杀掉所有相关的进程10. 一个 2 年 Android 开发者的 18 条忠告
