1

全て、

MultiValueField と MultiValueWidget を機能させることができました。しかし、「選択肢」を除けば、MultiValueField を構成するサブフィールドに属性 (「ラベル」や「初期」など) を追加できないようです。

これが私の(簡略化された)コードです:

class MyMultiWidget(django.forms.widgets.MultiWidget):
    def __init__(self,*args,**kwargs):
        myChoices = kwargs.pop("choices",[])
        widgets = (
            django.forms.fields.TextInput(),
            django.forms.fields.TextInput(),
            django.forms.fields.Select(choices=myChoices),
        )
        super(MyMultiWidget, self).__init__(widgets,*args,**kwargs)        

class MyMultiValueField(django.forms.fields.MultiValueField):
    widget = MyMultiWidget

    def __init__(self,*args,**kwargs):

        myLabel = "my label"
        myInitial = "my initial value"
        myChoices = [("a","a"),("b","b")]

        fields = (
            django.forms.fields.CharField(label=myLabel),
            django.forms.fields.CharField(initial=myInitial),
            django.forms.fields.ChoiceField(choices=myChoices),
        )
        super(MyMultiValueField,self).__init__(fields,*args,**kwargs)
        self.widget=MyMultiWidget(choices=myChoices)

class MyField(models.Field):

    def formfield(self,*args,**kwargs):
        return MyMultiValueField()

class MyModel(django.models.Model):
    myField = MyField(blank=True)

MyForm = modelform_factory(MyModel)

MyModel の「myField」フィールドは、MyForm でほぼ正しくレンダリングされます。2 つの TextInput と 1 つの Select の 3 つのウィジェットが表示されます。後者は、適切な選択肢に制限されています。ただし、前者の 2 つは、ラベルまたは初期値が設定されていません。

私が間違っていることについて何か提案はありますか?

ありがとう。

4

4 に答える 4

2

ウィジェットの機能を定義する必要がformat_outputあります - https://docs.djangoproject.com/en/dev/ref/forms/widgets/を参照してください。

これにより、フォーム html を好きなようにフォーマットできます。デフォルトでは、フィールド要素を連結するだけだと思います。

于 2012-08-30T14:54:41.257 に答える
0

ベンが提供する答えは少しハックです。「attrs」を使用して初期値を渡します。

forms.TextInput(attrs={'value': 'some text'})

興味深いことに、一部の属性が正しく渡されているようです。たとえば、私の場合、CharField に「max_length」を設定すると機能しました。

于 2014-02-14T21:37:44.870 に答える