【问题标题】:ManyToManyField IntegrityError in Django - why?Django 中的 ManyToManyField IntegrityError - 为什么?
【发布时间】:2011-09-18 04:11:46
【问题描述】:

我有 NewsPage 模型,News 有两个字段引用 Page

chapter   = models.ForeignKey('pages.Page', 
     verbose_name='Main chapter', 
     limit_choices_to={'type__in':['news','speech']}, 
     related_name='news'
)

add_chapters = models.ManyToManyField('pages.Page', blank=True, null=True, 
        verbose_name='Show also on', 
        limit_choices_to={'allow_add_news':True},
        related_name="added_news"
)

问题是,如果我试图从 django admin 中保存 News(为 add_chapters 选择了一些页面) - 我得到了

IntegrityError (1452, '无法添加或更新子行:外键 约束失败 (site.news_news_add_chapters, 约束news_id_refs_id_479506ad 外键 (news_id) 参考 news_news (id))')

怎么了?

【问题讨论】:

    标签: python mysql django foreign-keys many-to-many


    【解决方案1】:

    这对我来说适用于 Django 1.2 和 sqlite 和 mysql。我认为您的数据库方案是错误的。在一个新的数据库上尝试它并检查它是否工作。

    (检查您的代码 - 请记住 type 是 python 内置的。您是否在某处使用了 type 而不是 self.type?)。

    我使用的代码:

    # models.py
    class Page(models.Model):
        name = models.CharField(max_length=128)
        type = models.CharField(max_length=128, default="news")
        allow_add_news = models.BooleanField(default=True)
    
    class News(models.Model):
        name = models.CharField(max_length=128)
        chapter   = models.ForeignKey(Page, 
         verbose_name='Main chapter', 
         limit_choices_to={'type__in':['news','speech']}, 
         related_name='news'
        )
    
        add_chapters = models.ManyToManyField(Page, blank=True, null=True, 
                verbose_name='Show also on', 
                limit_choices_to={'allow_add_news':True},
                related_name="added_news"
        )
    

    【讨论】:

      猜你喜欢
      • 2011-09-16
      • 2012-02-08
      • 2011-08-02
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 2016-11-09
      相关资源
      最近更新 更多