代码之家  ›  专栏  ›  技术社区  ›  onigunn

自定义多值字段未以空形式显示

  •  1
  • onigunn  · 技术社区  · 14 年前

    我正在尝试在我的django应用程序中构建一个自定义的多值IDget。

    小装置

    class DayInputWidget(MultiWidget):
        def __init__(self, attrs=None):
            widgets = (DayInput(day_name='Mo'), DayInput(day_name='Di'), DayInput(day_name='Mi'), DayInput(day_name='Do'), DayInput(day_name='Fr'))
            super(DayInputWidget, self).__init__(widgets, attrs)
    
        def decompress(self, value):
            print value
            if value:
                return value
            return None
    

    输入

    class DayInput(Input):
        input_type = 'text'
        def __init__(self,attrs=None,day_name=None):
            super(DayInput, self).__init__(attrs)
            self.day_name = day_name
    
        def render(self, name, value, attrs=None):
            if name is None:
                name = 'Bestellmenge_%s' % self.day_name
            # create day inputs
            return mark_safe(u'<label style="padding-left: 5px">%s</label><input type="text" name="%s" size="5px"  value="0"/> ' % (self.day_name,name))
    

    领域

    class DayInputField(forms.MultiValueField):
        widget = DayInputWidget
    
        def __init__(self, *args, **kwargs):
            fields = (forms.CharField(),forms.CharField(),forms.CharField(),forms.CharField(), forms.CharField())
            super(DayInputField, self).__init__(fields, *args, **kwargs)
    
        def compress(self, data_list):
            print data_list
            if data_list:
                return u'|'.join(data_list)
            return None 
    

    形式

    class OrderForm(forms.Form):
        Produktart = forms.ModelChoiceField(MProductTypes.objects.all())
        Kw = forms.CharField(widget=KwSelect(), required=False)
        Bestellmengen = fields.DayInputField()
    

    问题:表单仅在绑定到数据时显示。如果我用空数据初始化表单,验证将放置并显示。这里怎么了?

    我用这种方式初始化我的表格

    form = OrderForm()
    

    根据文档,表单应显示为空。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Community CDub    8 年前

    class DayInputWidget(MultiWidget):
    def __init__(self, attrs=None):
        widgets = (DayInput(day_name='Mo'), DayInput(day_name='Di'), DayInput(day_name='Mi'), DayInput(day_name='Do'), DayInput(day_name='Fr'))
        super(DayInputWidget, self).__init__(widgets, attrs)
    
    def decompress(self, value):
        print value
        if value:
            return value
        return []
    

    in this SO answer