Как добавить необходимый атрибут?

Я хочу добавить атрибут required в поле product_title. Как я могу это сделать?

class add_product_info(forms.ModelForm):
    product_desc = RichTextField()

    class Meta:
        model = Products
        fields = ('product_title')

        labels = {'product_title':'Title'}

        widgets = {
            'product_title':forms.TextInput(attrs={'class':'form-control', 'style':'font-size:13px;'})
        }
        

    

Точно так же, как вы добавили атрибут style или class:

class add_product_info(forms.ModelForm):
    product_desc = RichTextField()

    class Meta:
        model = Products
        fields = ('product_title')
        labels = {'product_title':'Title'}
        widgets = {
            'product_title':forms.TextInput(attrs={'class':'form-control', 'style':'font-size:13px;', 'required': True})
        }

Вы можете слегка манипулировать существующими полями в методе __init__. Таким образом, вы можете автоматически добавить этот атрибут.

class BaseForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for bound_field in self:
            if hasattr(bound_field, "field") and bound_field.field.required:
                bound_field.field.widget.attrs["required"] = "required"

Используйте required в спецификациях полей. Это также будет обеспечено на уровне формы, так что форма Django будет отклонять форму, если поле не заполнено:

class ProductInfoForm(forms.ModelForm):
    product_desc = RichTextField(required=True)

    class Meta:
        model = Products
        fields = ('product_title',)
        labels = {'product_title':'Title'}
        widgets = {
            'product_title':forms.TextInput(attrs={'class':'form-control', 'style':'font-size:13px;'})
        }

Примечание: Формы в Django пишутся в PascalCase, а не snake_case, поэтому вы можете переименовать модель из add_product_info в ProductInfoForm.

если вы хотите добавить в свой шаблон, вы можете использовать django widget tweaks

{% load widget_tweaks %}

<!-- add 2 extra css classes to field element -->
{{ form.title|append_attr:"class:css_class_1 css_class_2" }}

django_widget_tweaks

Вернуться на верх