自定义窗口小部件 - 如何正确提供带有args的窗口小部件

时间:2012-09-12 13:09:11

标签: django forms widget

如何使用attrs正确提供自定义小部件?通话print attrs仅输出:

attrs in LockFlagWidget are:
{'id': u'id_lockedFlag'}

虽然我希望如此:

attrs in LockFlagWidget are:
{'id': u'id_lockedFlag', 'size': u'80}

我写了一个这样的自定义小部件:

class LockFlagWidget(forms.widgets.Widget):

    def render(self, name, value, attrs=None):
        if value is None:
                value = ''
        print "attrs in LockFlagWidget are:"
        print attrs
        staticURL = getattr(settings, 'STATIC_URL')

        if value != '':
            if value == True:
                return mark_safe(u"<img src=\"" + staticURL +
                                 "lock/img/lock_closed.ico\"/>"
                                 + "<span> - Is locked</span>")
            else:
                return mark_safe(u"<img src=\"" + staticURL +
                                 "lock/img/lock_open.ico\"/>"
                                 + "<span> - Is not locked</span>")

现在我以这样的形式使用小部件:

class LockForm(forms.ModelForm):
    class Meta:
        model = MyModel

    def __init__(self, *args, **kwargs):
        super(LockForm, self).__init__(*args, **kwargs)
        self.fields['lockedFlag'].widget = LockFlagWidget(attrs={'size':'80'})

MyModel看起来像这样:

class MyModel(models.Model):
    lockedFlag = models.BooleanField(default=False)

1 个答案:

答案 0 :(得分:1)

我认为传递到render方法中的属性是来自字段而不是widget的属性,尝试将print语句更改为print self.attrs,这将获取您传递的属性进入窗口小部件的构造函数。希望有道理吗?

相关问题