1

アプリケーション内のすべての NullBooleanFields をラジオ ボタンとして表示したいと考えています。それを行う最良の方法は何ですか?

次のテンプレートまたはそれに類似したものが理想的です。単なる「はい/いいえ/不明」とは異なる豊かなスタイリングと声のトーンを許可するためだけに。

'''<li class="field-%s">
    <label class="%s" title="%s">%s</label>
    <label class="y"><input type="radio" name="%s" value="1" %s /> %s</label>
    <label class="n"><input type="radio" name="%s" value="0" %s /> %s</label>
    <label class="e"><input type="radio" name="%s" value=""  %s /> %s</label>
    </li>
''' % (
        field,
        field, help text, verbose_name,
        field, y, y_label,
        field, n, n_label,
        field, e, e_label
    )
4

2 に答える 2

2

結局、ウィジェットをRadioSelect1つずつ設定する方が、たくさんあるのにコードが少ないと思いましたNullBooleanFields<ul>ウィジェットによって生成されたRadioSelectものは、CSS3セレクターが必要ですが、スタイルを設定するのに十分な構造です。

DRYではありませんが、面倒な作業は少なくなります。実用的で先に進む必要があります。

誰かがforms.pyレベルでデフォルトウィジェットをNullBooleanFieldからNullBooleanSelectに変更するコードを提供できればRadioSelect、私は喜んで答えを受け入れます。

于 2010-09-02T16:41:57.457 に答える
1

これを行うためにカスタムウィジェットを実装しました:

class YesNoNARadioSelect(widgets.Widget):
    CHOICES=((True,'Yes'),(False,'No'),(None,'N/A'))

    def render(self,name,value,attrs=None):
        s=[]
        for c in self.CHOICES:
            extraAttrs=attrs.copy()
            extraAttrs.update(dict(type='radio',name=name,value=c[0]))
            if value==c[0]: extraAttrs['checked']='checked'
            extraAttrs=self.build_attrs(extraAttrs)
            s.append(format_html('<label><input {}/>{}</label>',flatatt(extraAttrs),c[1]))
        return S(''.join(s))

私はうまくいっているようですが、私が間違っていることは何でも聞きたいです。

于 2014-05-04T21:39:46.710 に答える