具有递归结构时出现ManyToManyField错误。怎么解决?

时间:2010-05-07 14:08:52

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

我在模型中有一个带有递归结构的表(页面可以有子页面)

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约束可能的解决方案吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

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

试试这个:

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

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

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

相关问题