Я использую 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
, tree_id
и level
) дважды. Он работает в SQLite, по-видимому, потому что SQLite более щадящий, чем MySQL.
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()
?