2

FeinCMS にカスタムメイドのコンテンツ タイプがあります。

class DownloadsContent(models.Model):
    title = models.CharField(max_length=200, verbose_name=_('title'))
    files = FileManyToMany(verbose_name=_('files'))

「ファイル」フィールドは、.doc および .pdf ファイルのみを表示する多数のフィールドです。

class FileManyToMany(models.ManyToManyField):
    def __init__(self, to=MediaFile, **kwargs):
        limit = {'type__in': ['doc', 'pdf']}
        limit.update(kwargs.get('limit_choices_to', {}))
        kwargs['limit_choices_to'] = limit
        super(FileManyToMany, self).__init__(to, **kwargs)

今まではすべて正常に動作しています。このコンテンツ タイプを追加すると、すべてのファイルが表示されます。

しかし、自分のコンテンツ タイプで FilteredSelectMultiple ウィジェットを利用するにはどうすればよいでしょうか? お気に入り:

ここに画像の説明を入力

4

2 に答える 2

2

実際、これを達成するためのより簡単な方法は次のとおりです。

class DownloadContentInline(FeinCMSInline):
    filter_horizontal = ['files']


class DownloadContent(models.Model):
    feincms_item_editor_inline = DownloadContentInline
于 2013-03-15T15:05:17.933 に答える
0

自作のモデルフィールドクラス FileManyToMany に、ウィジェットを追加する「def formfield(self, ...)」を追加

from django.db import models
from feincms.module.medialibrary.models import MediaFile

class FileManyToMany(models.ManyToManyField):
    def __init__(self, to=MediaFile, **kwargs):
        limit = {'type__in': ['doc', 'pdf', 'xls']}
        limit.update(kwargs.get('limit_choices_to', {}))
        kwargs['limit_choices_to'] = limit
        super(FileManyToMany, self).__init__(to, **kwargs)

    def formfield(self, **kwargs):
        from django.contrib import admin
        defaults = {'widget': admin.widgets.FilteredSelectMultiple('vebose_name', False)}
        defaults.update(kwargs)
        return super(FileManyToMany, self).formfield(**defaults)
于 2013-01-30T13:19:52.450 に答える