0

序文: 私は、MPTT とカスタム ページ モデルを使用する独自のページ アプリを作成していました。これは私にとってはうまくいきましたが、FlatPages は私のカスタム ページ モデルよりも洗練されているため、単に拡張することに傾いています。

from django.db import models
from django.contrib.flatpages.models import FlatPage
from mptt.models import MPTTModel

class ExtendedFlatPage(FlatPage, MPTTModel):

    parent = models.ForeignKey('ExtendedFlatPage', null=True, blank=True, default=None, related_name="children", help_text="Hierarchical parent page (if any)")

    class Meta:
        ordering = ['flatpages__url']
        order_with_respect_to = 'parent'
        verbose_name = 'page'
        verbose_name_plural = 'pages'

    class MPTTMeta:
        left_attr = 'mptt_left'
        right_attr = 'mptt_right'
        level_attr = 'mptt_level'
        order_insertion_by = ['title']

    def __unicode__(self):
        return self.url

これは、実行時にエラーがスローされることを除いて、ほとんど機能しますpython manage.py syncdb

エラー:

iMac:cms colab$ python manage.py syncdb
Creating tables ...
Creating table my_flatpages_extendedflatpage
Traceback (most recent call last):
  File "manage.py", line 14, in <module>
    execute_manager(settings)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Django-1.3-py2.7.egg/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Django-1.3-py2.7.egg/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Django-1.3-py2.7.egg/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Django-1.3-py2.7.egg/django/core/management/base.py", line 220, in execute
    output = self.handle(*args, **options)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Django-1.3-py2.7.egg/django/core/management/base.py", line 351, in handle
    return self.handle_noargs(**options)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Django-1.3-py2.7.egg/django/core/management/commands/syncdb.py", line 101, in handle_noargs
    cursor.execute(statement)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Django-1.3-py2.7.egg/django/db/backends/util.py", line 34, in execute
    return self.cursor.execute(sql, params)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Django-1.3-py2.7.egg/django/db/backends/mysql/base.py", line 86, in execute
    return self.cursor.execute(query, args)
  File "build/bdist.macosx-10.6-intel/egg/MySQLdb/cursors.py", line 174, in execute
  File "build/bdist.macosx-10.6-intel/egg/MySQLdb/connections.py", line 36, in defaulterrorhandler
django.db.utils.DatabaseError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 2")

誰かが私を正しい方向に向けることができれば、とても感謝しています。ありがとう!

4

1 に答える 1

1

交換

class ExtendedFlatPage(FlatPage, MPTTModel):

class ExtendedFlatPage(MPTTModel, FlatPage):

これにより、MPTTModel クラスは FlatPage の属性とメソッドをオーバーライドできます。

@コメント

FlatPage モデルの何か (属性、メソッド) が、このエラーを引き起こしている MPTTModel の何かをオーバーライドしているようです。

インポート元のクラスの順序は重要です。例を次に示します。

class A:
   attribute = 1
class B:
   attribute = 2
class C(A,B):
   pass

クラスCattribute値になります1

于 2011-08-14T10:59:02.230 に答える