2

我按照此处找到的说明进行操作

http://django-blog-zinnia.readthedocs.org/en/latest/how-to/extending_entry_model.html

不幸的是,我无法扩展。第一个奇怪的事情是 - 我必须改变入口模块的导入方式:

from zinnia.models.entry import Entry
from zinnia.admin.entry import EntryAdmin

from zinnia.models import Entry
from zinnia.admin import EntryAdmin

更改后,我然后运行服务器并转到管理页面,但随后出现此错误。

'RatingAdmin.fieldsets[0][1]['fields']' refers to field 'rating' that is missing from the form.

这是我的代码 admin.py

from django.contrib import admin
from django.utils.translation import ugettext_lazy as _


from zinnia.models import Entry
from zinnia.admin import EntryAdmin

class RatingAdmin(EntryAdmin):
# into the 'Content' fieldset
fieldsets = ((_('Content'), {'fields': (
'title', 'content', 'image', 'status', 'rating')}),) + \
EntryAdmin.fieldsets[1:]

# Unregister the default EntryAdmin
# then register the EntryGalleryAdmin class
admin.site.unregister(Entry)
admin.site.register(Entry, RatingAdmin)

这是我的抽象类模型happy_models.py

from django.db import models
from zinnia.models.entry import EntryAbstractClass

class Happy(models.Model):
    rating = models.CharField(max_length=200)

    def __unicode__(self):
        return u'Rating %s' % self.title

    class Meta(EntryAbstractClass.Meta):
        abstract = True

这是我在 settings.py 中的百日草入门基础模型路径

ZINNIA_ENTRY_BASE_MODEL = 'happy.happy_models.Happy'

我刚刚在我的控制台上注意到了这一点

/zinnia/models.py:30‌​2: RuntimeWarning: happy.happy_models.Happy cannot be imported

这是我的目录设置

happy/
    admin.py
    happy_models.py
    views.py

扩展条目时我可能做错了什么?

4

2 回答 2

4

我认为您跳过了两个部分:

  1. 创建您自己的扩展模型:EntryAbstractClass from zinnia.models.entry
  2. 使用 settings.py 文件中的 ZINNIA_ENTRY_BASE_MODEL 设置告诉 zinnia 使用您的新模型

还要注意你的应用扩展的结构,我通常使用这样的东西:

/zinna_extras
    __init__.py
    entry_plus.py  <---- This is where your model that extends EntryAbstractClass goes
    admin.py <--- You got this part right above
    views.py <--- blank
    migrations/ <--- all original zinnia migrations + what you need for your model (see below)

请注意,没有 models.py 文件。这搞砸了 Zinnia 的进口风格。

如果您使用南迁移,您可能还需要在 settings.py 中设置以下内容:

SOUTH_MIGRATION_MODULES = {
    'zinnia': 'zinnia_extras.migrations.zinnia',
}

将所有原始 zinnia 迁移复制到 zinnia_extra 应用程序中的迁移文件夹中,然后为模型创建所需的任何新迁移。这只是告诉 South 使用您的应用程序作为 Zinnia 迁移的来源,而不是通常的 zinnia 应用程序。

于 2012-11-04T02:04:11.057 回答
1

我终于发现了——通过在交互模式下运行服务器,我能够进行调试。示例代码必须修改为:-

from zinnia.models import EntryAbstractClass

代替

from zinnia.models.entry import EntryAbstractClass
于 2012-11-06T04:21:26.597 回答