我正在使用 django-mptt 来管理一个简单的 CMS,其模型名为Page
,看起来像这样(最可能不相关的字段被删除):
class Page(mptt.Model, BaseModel):
title = models.CharField(max_length = 20)
slug = AutoSlugField(populate_from = 'title')
contents = models.TextField()
parent = models.ForeignKey('self', null=True, blank=True,
related_name='children', help_text = u'The page this page lives under.')
删除的字段称为attachments
, headline_image
, nav_override
, 和published
使用 SQLite 一切正常,但是当我使用 MySQL 并尝试使用管理员(或使用 ModelForms 和save()
方法)添加页面时,我得到了这个:
ProgrammingError at /admin/mycms/page/add/
(1110, "Column 'level' specified twice")
其中生成的 SQL 是:
'INSERT INTO `kaleo_page` (`title`, `slug`, `contents`, `nav_override`, `parent_id`,
`published`, `headline_image_id`, `lft`, `rght`, `tree_id`, `level`, `lft`, `rght`,
`tree_id`, `level`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)'
出于某种原因,我得到了 django-mptt 字段(lft
、、rght
和)两次。它在 SQLite 中工作大概是因为 SQLite 比 MySQL 更宽容地接受它。tree_id
level
get_all_field_names()
还显示了两次:
>>> Page._meta.get_all_field_names()
['attachments', 'children', 'contents', 'headline_image', 'id', 'level', 'lft',
'nav_override', 'parent', 'published', 'rght', 'slug', 'title', 'tree_id']
这大概就是 SQL 不好的原因。我能做什么会导致这些字段出现两次get_all_field_names()
?