【问题标题】:ManyToManyField error when having recursive structure. How to solve it?具有递归结构时的 ManyToManyField 错误。如何解决?
【发布时间】:2011-02-16 20:45:34
【问题描述】:

我在模型中有以下表格,具有递归结构(一个页面可以有子页面)

class DynamicPage(models.Model):    
    name = models.CharField("Titre",max_length=200)
    parent = models.ForeignKey('self',null=True,blank=True)

我想创建另一个与该表具有 ManyToMany 关系的表。

class UserMessage(models.Model):    
    name = models.CharField("Nom", max_length=100)
    page = models.ManyToManyField(DynamicPage)

一个UserMessage可以显示在多个页面上,一个页面可以显示多个消息。

当我添加新的 UserMessage 时,由于以下外键约束而出现错误。

ALTER TABLE `website_dynamicpage` ADD CONSTRAINT `parent_id_refs_id_29c58e1b` FOREIGN KEY (`parent_id`) REFERENCES `website_dynamicpage` (`id`); 

我认为我的问题原因是约束是在 DynamicPage 的父字段上设置的,而不是在它的 id 上。

顶级 DynamicPages 没有父页面,但它们可以显示 UserMessage。

所以,我希望与页面 id 而非页面父级建立 ManyToMany 关系。

我没有在 Django 文档中看到如何说 ManyToMay 位于 UserMessage id 和 DynamicPage id 之间,而不是 DynamicPage 父级之间。

如何做到这一点?有可能吗?

手动重新创建 SQL 约束是否可行?

提前致谢

【问题讨论】:

  • 重申您的问题,我很难理解它;)您的意图是创建关系UserMessage 多对多DynamicPage,对吗?您显示的 SQL 约束与 ForeignKey 相关,所以我不明白。
  • 感谢您的回答。我试图更好地解释。有时用外语解释事情并不容易:)

标签: python django django-models many-to-many


【解决方案1】:

(假设我正确理解了问题;))

试试这个:

class DynamicPage(models.Model):
    #...
    other = models.ManyToManyField("self")

带有可选的symmetrical 关键字参数(默认为True)。

http://docs.djangoproject.com/en/dev/ref/models/fields/#manytomanyfield

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多