python - Django 的两个自引用外键

标签 python django django-1.7

<分区>

在 Django 1.7 中编写一个简单的应用程序。是表示链表元素的模型:

class TrainingUserWordSetItem(models.Model):
    training_set = models.ForeignKey(TrainingUserWordSet)
    user_word = models.ForeignKey(UserWord)
    prev_item = models.ForeignKey("TrainingUserWordSetItem", null=True, default=None)
    next_item = models.ForeignKey("TrainingUserWordSetItem", null=True, default=None)

迁移时出现错误:

hellodict.TrainingUserWordSetItem.next_item: (fields.E304) Reverse accessor for 'TrainingUserWordSetItem.next_item' clashes with reverse accessor for 'TrainingUserWordSetItem.prev_item'.
        HINT: Add or change a related_name argument to the definition for 'TrainingUserWordSetItem.next_item' or 'TrainingUserWordSetItem.prev_item'.
hellodict.TrainingUserWordSetItem.prev_item: (fields.E304) Reverse accessor for 'TrainingUserWordSetItem.prev_item' clashes with reverse accessor for 'TrainingUserWordSetItem.next_item'.
        HINT: Add or change a related_name argument to the definition for 'TrainingUserWordSetItem.prev_item' or 'TrainingUserWordSetItem.next_item'.

如何制作两个自引用外键字段?

更新:

帮助使用 related_name='+':

class TrainingUserWordSetItem(models.Model):
    training_set = models.ForeignKey(TrainingUserWordSet)
    user_word = models.ForeignKey(UserWord)
    prev_item = models.ForeignKey("TrainingUserWordSetItem", null=True, default=None)
    next_item = models.ForeignKey("TrainingUserWordSetItem", null=True, default=None, related_name='+')

最佳答案

您实际上可以在一个字段上完成您正在尝试的事情。我相信这会奏效:

next_item = models.ForeignKey('self', null=True, default=None, related_name='prev_item')

注意'self'的使用;根据Django documentation , 要创建递归关系——一个与自身具有多对一关系的对象——使用 models.ForeignKey('self')。

此外,我建议使用 OneToOneField 而不是 ForeignKey 来尝试此操作,假设每个项目都只有一个上一个项目和一个下一个项目。

关于python - Django 的两个自引用外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32637575/

相关文章:

python - admin.sites.url 密码传输

python - Django 测试 : AssertionError: The form 'form' was not used to render the response

Django 1.7 ImageField 表单验证

python - Django session 中的当前字段值

python - Django 模型线程安全吗?

python - python( flask )中函数的最大执行时间

用于合并排序文件的 Python 类,如何改进?

django - 有没有办法回滚所有 django 应用程序迁移?

使用 aiohttp 的 Python lib 美丽的汤

python - Odoo 8 通过自定义模块添加笔记本选项卡给出 'KeyError:'