Django中的ManyToManyField完整性错误 - 为什么?
我有两个模型,分别是 News(新闻)和 Page(页面),而 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 管理后台保存 News(并且选择了一些页面来添加章节)时,我遇到了这个错误:
IntegrityError(1452,'无法添加或更新子行:外键约束失败 (
site
.news_news_add_chapters
, 约束news_id_refs_id_479506ad
外键 (news_id
) 参考news_news
(id
)')
这是怎么回事呢?
1 个回答
0
我在使用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"
)