让 Django 表单向输入添加类,以防出现错误

问题描述 投票:0回答:1

我正在使用 Django 4.2.9,需要一个表单向输入字段添加一个附加类,以防验证失败。

我已经可以为每种情况添加类,但我不知道如何针对错误情况执行此操作。

class ItemForm(forms.models.ModelForm):
    class Meta:
        model = Item
        fields = ("text", )
        widgets = {
            "text": forms.widgets.TextInput(
                attrs={
                    "placeholder": "Enter a to-do item",
                    "class": "form-control form-control-lg",
                }
            ),
        }
        error_messages = {"text": {"required": EMPTY_ITEM_ERROR}}

    def save(self, for_list):
        self.instance.list = for_list
        return super().save()

我想要

class="form-control form-control-lg is-invalid"
用于文本输入。

<form method="POST" action="/lists/8/">
    <input type="text" name="text" value="Buy wellies" placeholder="Enter a to-do item" class="form-control form-control-lg" required id="id_text">
    <input type="hidden" name="csrfmiddlewaretoken" value="vcojkMtz3GeonURczjMwIsbsDPQUbeKgrXrPIxZY4jIJSfuUKKGVgaj7wLQBatsd">                        
    <div class="invalid-feedback"><ul class="errorlist"><li>You&#x27;ve already got this in your list</li></ul></div>
                        
</form>
css django django-forms
1个回答
0
投票

在您的情况下,当验证失败时,我可能会通过以下方式覆盖 init

类 ItemForm(forms.models.ModelForm):

class Meta:
    model = Item
    fields = ("text",)
    widgets = {
        "text": forms.widgets.TextInput(
            attrs={
                "placeholder": "Enter a to-do item",
                "class": "form-control form-control-lg",
            }
        ),
    }
    error_messages = {"text": {"required": EMPTY_ITEM_ERROR}}

def __init__(self, *args, **kwargs):
    super(ItemForm, self).__init__(*args, **kwargs)
    if self.errors and 'text' in self.errors:
        text_widget = self.fields['text'].widget
        existing_classes = text_widget.attrs.get('class', '')
        text_widget.attrs['class'] = f'{existing_classes} is-invalid'

def save(self, for_list):
    self.instance.list = for_list
    return super().save()

这样,当验证失败时,我们在文本输入上添加“is-invalid”类。所以基本上并且希望这段代码能够检查表单文本字段中的任何错误。如果有的话我们就会“is-invalid”

我认为更好的方法(我喜欢将所有内容分开)是将错误类放在单独的方法中,这样根据您的项目还做了什么,您可以在以后重用它们。

祝你好运:)

© www.soinside.com 2019 - 2024. All rights reserved.