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

标签 python django

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

模型.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")

表单.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'})

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

最佳答案

您可以使用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 中使用,就像文档提到的那样。

关于python - 使用通用编辑 UpdateView 时在表单验证期间自定义 error_messages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50523146/

相关文章:

python - FastAPI 上是否可以有一个带有默认值的必需查询参数?

python - PyQt - 减少小部件*扩展*布局中的边距和间距

python - 如何以最少的安装工作部署 Django 项目?

python - 如何在 django-rest-framework 的模型 View 集中取消设置 csrf?

Python datetime.today() 在不同的 python 程序中显示不同的时间

python - sqlite3 和 sqlalchemy 有什么区别?

python - 如何测试使用 XCom 的 Apache Airflow 任务

python - NDB查询以字符串开头的结果

javascript - 在 Javascript Django 中从 'param' 的 'views.py' 获取值

django 一对多关系