当使用继承和ForeignKey时,Django syncdb会冲突related_name



这次我想这不是我的愚蠢,而是一场真正的冲突。我有下面的代码(简化):

from django.db import models
class Alpha(models.Model):
    relation = models.ForeignKey('Delta', related_name = 'reverse_relation', blank = True, null = True)
    class Meta:
        abstract = True
class Beta(Alpha):
    pass
class Gamma(Alpha):
    pass
class Delta(models.Model):
    pass

问题是。reverse_relation可以引用Beta的实例或Gamma的实例。我必须以某种方式提供多个related_name值(或者一个依赖于类名的值)。我认为问题很清楚,但要完整,错误(运行syncdb时):app.beta:字段'relation'的访问器与相关字段'Delta.reverse_relation'冲突。在'relation'的定义中添加一个related_name参数。
app.beta:字段"relation"的反向查询名称与相关字段"Delta.reverse_relation"冲突。在'relation'的定义中添加一个related_name参数。
app.gamma:字段'relation'的访问器与相关字段'Delta.reverse_relation'冲突。在'relation'的定义中添加一个related_name参数。
app.gamma:字段"relation"的反向查询名称与相关字段"Delta.reverse_relation"冲突。在'relation'的定义中添加一个related_name参数。

是否有可能将ForeignKey放在父Alpha中,或者是将此代码剪切粘贴到Beta和Gamma的唯一方法?我不喜欢这样做,因为如果我不能在父元素中定义所有子元素共享的一半字段,那么它就会破坏继承的意义。

任何帮助都非常感谢!

(如果有人可以评论为什么错误信息不在代码框中,我会修复它。)

我想你会发现Django文档中的以下建议很有帮助和相关:https://docs.djangoproject.com/en/1.7/topics/db/models/be-careful-with-related-name

将关系字段的声明更改为:

relation = models.ForeignKey('Delta', related_name="%(app_label)s_%(class)s")

祝你好运

相关内容

  • 没有找到相关文章

最新更新