0

我是 feincms 的新手,想写一个扩展,我写了一个非常基本的

from __future__ import absolute_import, unicode_literals

from django.db import models
from django.utils.translation import ugettext_lazy as _

from feincms import extensions


class Extension(extensions.Extension):
    def handle_model(self):
        self.model.add_to_class('excerpt', models.TextField(
            _('excerpt'),
            blank=True,
            help_text=_('Excerpts are good!')))

    def handle_modeladmin(self, modeladmin):
        modeladmin.add_extension_options(_('Exceprt'), {
            'fields': ('excerpt',),
            'classes': ('collapse',),
        })

添加文本字段摘录,但现在我想写一个更复杂的。我想允许使用类似于为区域选择媒体的过程将单个特色图像添加到页面,但我对如何进行此操作一无所知。任何有关此扩展的指导将不胜感激!

谢谢!

4

1 回答 1

1

不确定我是否正确理解了您的问题,但也许这会有所帮助:https ://github.com/matthiask/feincms-in-a-box/blob/master/box/cms/models.py#L57 - 只需添加一个 MediaFileForeignKey,并将新字段添加到 raw_id_fields。这应该就是全部了。

示例代码如下:

from __future__ import absolute_import, unicode_literals

from django.db import models
from django.utils.translation import ugettext_lazy as _

from feincms.module.page.models import Page
from feincms.extensions import Extension
from feincms.module.medialibrary.fields import MediaFileForeignKey
from feincms.module.medialibrary.models import MediaFile

class ExcerptExtension(Extension):
    def handle_model(self):
        self.model.add_to_class(
            'excerpt_image',
            MediaFileForeignKey(
                MediaFile, verbose_name=_('image'),
                blank=True, null=True, related_name='+'))
        self.model.add_to_class(
            'excerpt_text',
            models.TextField(_('text'), blank=True))

    def handle_modeladmin(self, modeladmin):
        modeladmin.raw_id_fields.append('excerpt_image')
        modeladmin.add_extension_options(_('Excerpt'), {
            'fields': ('excerpt_image', 'excerpt_text'),
        })


Page.register_extensions(
    ExcerptExtension,
)

注意:此代码需要最新版本的 FeinCMS 才能按原样工作。更准确地说,只有 1.9 及更高版本支持Page.register_extensions直接传递扩展类(而不是虚线 Python 路径)。

于 2014-08-08T19:13:52.543 回答