Django model 反向引用中的related_name

来源:互联网 发布:手机应用程序数据备份 编辑:程序博客网 时间:2024/05/19 14:17

问题:

定义表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()

参考:

http://www.cnblogs.com/blogofwyl/p/4283513.html

0 0
原创粉丝点击