0

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)
4

1 に答える 1

1

レンダリングメソッドに渡される属性は、ウィジェットではなくフィールドからの属性であるように見えます。printステートメントをに変更してみてprint self.attrsください。これにより、ウィジェットのコンストラクターに渡された属性が取得されます。それが理にかなっていることを願っていますか?

于 2012-09-12T13:20:08.053 に答える