django-mptt fields showing up twice, breaking SQL
        Posted  
        
            by Dominic Rodger
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Dominic Rodger
        
        
        
        Published on 2010-04-28T17:50:31Z
        Indexed on 
            2010/04/28
            19:37 UTC
        
        
        Read the original article
        Hit count: 702
        
django
|django-mptt
I'm using django-mptt to manage a simple CMS, with a model called Page, which looks like this (most presumably irrelevant fields removed):
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.')
removed fields are called attachments, headline_image, nav_override, and published
All works fine using SQLite, but when I use MySQL and try and add a Page using the admin (or using ModelForms and the save() method), I get this:
ProgrammingError at /admin/mycms/page/add/
(1110, "Column 'level' specified twice")
where the SQL generated is:
'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)'
for some reason I'm getting the django-mptt fields (lft, rght, tree_id and level) twice. It works in SQLite presumably because SQLite is more forgiving about what it accepts than MySQL.
get_all_field_names() also shows them twice:
>>> Page._meta.get_all_field_names()
['attachments', 'children', 'contents', 'headline_image', 'id', 'level', 'lft',
'nav_override', 'parent', 'published', 'rght', 'slug', 'title', 'tree_id']
Which is presumably why the SQL is bad. What could I have done that would result in those fields appearing twice in get_all_field_names()?
© Stack Overflow or respective owner