Как атрибут "required" динамически устанавливается на MultiWidget?
Существует 4x TextInput элементов, которые составляют MultiWidget. Только первый TextInput требует атрибута required. Однако required устанавливается для всех четырех элементов.
Form.use_required_attribute не подходит для моего случая из-за его бинарной природы; либо значения для всех полей формы обязательны, либо нет. Я установил required=False во всех возможных местах, где это потенциально оправдано, но я все еще не получаю желаемого результата.
Как я могу получить только первый TextInput, установленный в required?
class MultiTagWidget(MultiWidget):
def __init__(self, *args, **kwargs):
widgets = [TextInput(attrs=kwargs['attrs']) for i in range(4)]
super().__init__(widgets, *args, **kwargs)
def decompress(self, value):
if value:
return value.split("_")
return ""
class TagField(MultiValueField):
def __init__(self, *args, **kwargs):
fields = []
for i in range(4):
field = CharField(**{
"min_length": 1, "max_length": 25, "validators":[
RegexValidator("[<>`':;,.\"]", inverse_match=True)
]
})
if i == 0:
field.error_messages = {
'incomplete': "Provide at least 1 tag for your question"
}
field.required = True
else:
field.required = False
fields.append(field)
super().__init__(fields, *args, **kwargs)
def compress(self, data_list):
data_list = "_".join(list(set([tag.lower().strip() for tag in data_list])))
return data_list
tags = TagField(
widget=MultiTagWidget(
attrs={"required": False}
), require_all_fields=False,
help_text="Add up to 4 tags for your question"
)