如何覆盖默认的 Django 表单验证错误

how to override default Django form validation error

我试过了,但没用。显示默认错误消息 only.please 帮助......

from django import forms
from SharedApps_Application.models import certificateDb
from django.contrib.admin.widgets import AdminDateWidget
from django.forms.fields import DateField

my_default_errors = {
    'required': 'Application field is required',
}

class CertificateForm(forms.ModelForm):

    startdate = forms.DateField(widget = forms.SelectDateWidget(years=range(1995, 2100)))
    expiredate = forms.DateField(widget = forms.SelectDateWidget(years=range(1995, 2100)))
    application = forms.CharField(error_messages = my_default_errors)
    class Meta:
        model = certificateDb
        fields = ('application', 'startdate', 'expiredate', 'environment_type','File' )

screenshot

[1]: https://i.stack.imgur.com/8zhM6.png

update

from django import forms
from SharedApps_Application.models import certificateDb
from django.contrib.admin.widgets import AdminDateWidget
from django.forms.fields import DateField
class CertificateForm(forms.ModelForm):

    startdate = forms.DateField(widget = forms.SelectDateWidget(years=range(1995, 2100)))
    expiredate = forms.DateField(widget = forms.SelectDateWidget(years=range(1995, 2100)))
    application = forms.CharField()
    class Meta:
        model = certificateDb
        fields = ('application', 'startdate', 'expiredate', 'environment_type','File' )

        error_messages = {
            'application': {
                'required': ("Application field is required"),
            },
            }

根据您刚刚添加的屏幕截图,您想更改浏览器呈现给客户端的错误消息。这可以通过向您的字段添加 oninvalid 属性来完成。

这是在您的 forms.py 文件中完成的方式:

from django import forms
from SharedApps_Application.models import certificateDb
from django.contrib.admin.widgets import AdminDateWidget
from django.forms.fields import DateField


class CertificateForm(forms.ModelForm):
    app_attributes = {'oninvalid': 'this.setCustomValidity("Application field is required")', 'oninput': 'this.setCustomValidity("")'}
    startdate = forms.DateField(widget = forms.SelectDateWidget(years=range(1995, 2100)))
    expiredate = forms.DateField(widget = forms.SelectDateWidget(years=range(1995, 2100)))
    application = forms.CharField(widget=forms.TextInput(attrs=app_attributes)
    class Meta:
        model = certificateDb
        fields = ('application', 'startdate', 'expiredate', 'environment_type','File' )

        error_messages = {
            'application': {
                'required': ("Application field is required"),
            },
            }

假设您要覆盖的字段是 'application'。在您的 class 元下添加一个 error_messages 字典,如下所示:

旧答案 - 覆盖 Django 表单验证错误消息

from django import forms
from SharedApps_Application.models import certificateDb
from django.contrib.admin.widgets import AdminDateWidget
from django.forms.fields import DateField


class CertificateForm(forms.ModelForm):

    startdate = forms.DateField(widget = forms.SelectDateWidget(years=range(1995, 2100)))
    expiredate = forms.DateField(widget = forms.SelectDateWidget(years=range(1995, 2100)))
    application = forms.CharField()
    class Meta:
        model = certificateDb
        fields = ('application', 'startdate', 'expiredate', 'environment_type','File' )

        error_messages = {
            'application': {
                'required': ("Application field is required"),
            },
            }