使用通用编辑UpdateView时,在表单验证期间自定义error_messages

时间:2018-05-25 06:52:57

标签: python django

当使用通用编辑UpdateView时,我在表单验证期间当前用于自定义error_messages的解决方案如下

models.py

from django.db import models

class Employee(models.Model):
    first_name = models.CharField(max_length=100, verbose_name="Name")
    last_name = models.CharField(max_length=100, verbose_name="Surname")
    date_of_birth = models.DateField(blank=True, null=True, verbose_name="Birthday")

forms.py

from django import forms
from .models import Employee

class ModelFormWithCustomErrorMessages(forms.ModelForm):
    class Meta:
        model = Employee
        fields = '__all__'
        error_messages = {'date_of_birth': {'invalid': 'Custom invalid error message'}}

views.py:

from .models import Employee
from .forms import ModelFormWithCustomErrorMessages

class EmployeeUpdateView(UpdateView):
    model = Employee
    form_class = ModelFormWithCustomErrorMessages

我不喜欢这里的事情是你必须为你想要定义error_messages的每个模型创建单独的ModelForm(ModelFormWithCustomErrorMessages)。

为模型字段添加参数error_messages不适用于表单:

class Employee(models.Model):
    date_of_birth = models.DateField(blank=True, null=True, error_messages={'invalid': 'Custom invalid error message'})

使用通用编辑视图时,是否有更好的方法来自定义error_messages?

1 个答案:

答案 0 :(得分:1)

您可以使用modelform_factory()功能,可能是这样的:

from django import forms

class EmployeeUpdateView(UpdateView):
    model = Employee
    form_class = forms.modelform_factory(
        model=Employee,
        fields='__all__',
        error_messages={
            'date_of_birth': {'invalid': 'Custom invalid error message'},
        })

是的,模型错误消息仅在specific situations中使用,就像提到的文档一样。