我正在使用 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've already got this in your list</li></ul></div>
</form>
在您的情况下,当验证失败时,我可能会通过以下方式覆盖 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”
我认为更好的方法(我喜欢将所有内容分开)是将错误类放在单独的方法中,这样根据您的项目还做了什么,您可以在以后重用它们。
祝你好运:)