2017-08-25 100 views
1

我正在试图创建一个不需要最后一个字段的MultiValueField。具有非必填字段的Django MultiValueField

根据该文件,如果我设置require_all_fields为False,那么我可以设置为不被需要的一些领域,像这样: -

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

我看到这是一个老问题,但我今天碰到它,并找到了解决的办法是增加required=False到超级呼叫MyMultiValueField.__init__使之成为:

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