0

我需要类似Django的功能

原因:我为管理员和其他页面编写了带有单独配置的小部件。在自定义字段中确定的配置:

class Article(models.Model):
    field = CustomField(config={'default': {}, 'admin': {}})

出于这个原因,我不能用我的小部件扩展 AdminTextareaWidget(下面的当前代码的一部分)。或者我可以吗?如何?

class CustomField(TextField):
    def __init__(self, config, *args, **kwargs):
        self.config = dict_merge(initial_config, config)
        super(CustomField, self).__init__(*args, **kwargs)
    def formfield(self, **kwargs):
        ###################################
        # need to check for admin page here
        ###################################
        defaults = {'widget': CustomWidget(self.config)}
        defaults.update(kwargs)
        return super(CustomField, self).formfield(**defaults)

class CustomWidget(Textarea):
    def __init__(self, config, attrs=None):
        #########
        # or here
        #########
        self.config = config
        super(CustomWidget, self).__init__(attrs)
4

1 回答 1

0

我想我找到了答案!
也许这是hack,但它有效。

def formfield(self, **kwargs):
    # kwargs contain a widget name in admin! At least in Django 1.5.4.
    if 'widget' in kwargs and kwargs['widget'] is AdminTextareaWidget:
        config = self.config['admin']
    else:
        config = self.config['default']
    defaults = {'widget': CustomWidget(config)}
    defaults.update(kwargs)
    return super(CustomField, self).formfield(**defaults)
于 2013-09-21T09:05:37.830 回答