私は django-mptt を使用して、Page
次のようなモデルを持つ単純な CMS を管理しています (おそらく無関係なフィールドは削除されています)。
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 を使用し、admin を使用して (または 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
) を 2 回取得しています。おそらく、SQLite は MySQL よりも許容範囲が広いため、SQLite で動作します。
get_all_field_names()
また、それらを2回示します。
>>> Page._meta.get_all_field_names()
['attachments', 'children', 'contents', 'headline_image', 'id', 'level', 'lft',
'nav_override', 'parent', 'published', 'rght', 'slug', 'title', 'tree_id']
おそらくこれが、SQLが悪い理由です。これらのフィールドが に 2 回表示されるようにするにはどうすればよいでしょうget_all_field_names()
か?