Как атрибут "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"
    )
Вернуться на верх