2017-08-25 17 views
1

最後のフィールドが不要なMultiValueFieldを作成しようとしています。私はFalseにrequire_all_fieldsを設定している場合不要なフィールドを持つDjango MultiValueField

ドキュメントによると、その後、私はこのように、必要とされないためにいくつかのフィールドを設定することができます -

class MyMultiWidget(widgets.MultiWidget): 
    def __init__(self, attrs=None): 
     _widgets = (
      widgets.TextInput(attrs=attrs), 
      widgets.TextInput(attrs=attrs), 
      widgets.TextInput(attrs=attrs), 
      widgets.TextInput(attrs=attrs), 
     ) 
     super(MyMultiWidget, self).__init__(_widgets, attrs) 

    def decompress(self, value): 
     return [None, None, None, None] 


class MyMultiValueField(forms.MultiValueField): 
    widget = MyMultiWidget 

    def __init__(self, *args, **kwargs): 
     fields = (
      forms.CharField(), 
      forms.CharField(), 
      forms.CharField(), 
      forms.CharField(required=False)) 
     super(MyMultiValueField, self).__init__(
      require_all_fields=False, fields=fields, *args, **kwargs) 

    def compress(self, data_list): 
     return data_list 

しかし、これはこのように見えるが生成HTML: -

<input name="field_0" required="" class="textinput textInput form-control" id="id_field_0" autocomplete="off" type="text"> 
<input name="field_1" required="" class="textinput textInput form-control" id="id_field_1" type="text"> 
<input name="field_2" required="" class="textinput textInput form-control" id="id_field_2" type="text"> 
<input name="field_3" required="" class="textinput textInput form-control" id="id_field_3" type="text"> 

ご覧のとおり、すべてのフィールドが必要です。私がここで間違って何をしたのか?

答えて

0

私は、これは古い問題であることがわかり、私は今日それに出くわしたし、解決策を見つけたが、それはなるようにMyMultiValueField.__init__でスーパーコールにrequired=Falseを追加することです:

super(MyMultiValueField, self).__init__(
     required=False, require_all_fields=False, fields=fields, *args, **kwargs)