当前位置: 首页 > 知识库问答 >
问题:

自定义Django表单错误消息中的模型验证值

章涵容
2023-03-14

我创建了一个Django表单:

class AddFaceForm(forms.ModelForm):

    class Meta:
        model = Face
        fields = ('person', 'x', 'y', 'w', 'h')

Face模型中,w定义为

w = models.DecimalField(
    'Relative width',
    validators=[MinValueValidator(0.05), MaxValueValidator(1)]
)

如果用户为宽度输入0,则Django在表单验证时返回的错误消息为

确保该值大于或等于0.05。

因此,它很好地包含了来自MinValueValidator的值。我想把它改为“相对宽度必须是”

为了实现这一点,我尝试在addFaceForm Meta中自定义错误

class AddFaceForm(forms.ModelForm):

    class Meta:
        model = Face
        fields = ('person', 'x', 'y', 'w', 'h')
        error_messages = {
            'w': {
                'min_value': 'Relative width must be >= 0.05'
            }
        }

但这意味着要硬编码0.05的值。我想从模型定义中读一下。如何做到这一点?

共有1个答案

裴嘉许
2023-03-14

问得好。

MinValueValidator是BaseValidator的子类。并且,BaseValidator在其构造函数中包含可选消息。从代码中,您可以看到消息可以使用以下三个参数:limit_valueshow_valuevaluelimit_value是验证器的最小值这种情况下。show_value是用户输入的清除值,value是用户输入的原始值。因此,您可以执行以下操作来实现您的目标:

from django.core.validators import MinValueValidator
from django.db import models
from django.utils.translation import ugettext_lazy as _


class Face(models.Model):
    w = models.DecimalField(
        'Relative width',
        max_digits=5,
        decimal_places=2,
        validators=[MinValueValidator(0.05, _('Relative width must be >= %(limit_value)s'))],
    )

或者,如果希望在表单中指定错误消息,则可以执行以下操作:

from django import forms
from django.utils.translation import ugettext_lazy as _

from .models import Face


class FaceForm(forms.ModelForm):
    class Meta:
        model = Face
        fields = ['w']
        error_messages = {
            'w': {
                'min_value': _('Relative width must be >= %(limit_value)s')
            }
        }

DecimalField文档告诉您可以插值极限值

 类似资料:
  • 我在Codeigniter中为表单验证创建了一个自定义函数。它连接到URL帮助器,我通过制作MY_URL_帮助器实现了这一点。 助手修改: 我如何称呼验证: 美元这个- 语言文件: 但是提交表单时不会显示任何错误信息。如果我将valid_url函数更改为true和false,它将执行该函数。所以它运行这个函数。 如何使错误消息出现?

  • 问题内容: 我可以看到使用表单时如何向字段添加错误消息,但是模型表单呢? 这是我的测试模型: 我的模型表格: 在字段中的错误信息:和是: 这是必填栏 如何以模型形式进行更改? 问题答案: 对于简单的情况,你可以指定自定义错误消息

  • 问题内容: 我有一个带有开始和结束日期范围的Django模型。我想强制执行验证,以便没有两个记录具有重叠的日期范围。最简单的实现方式是什么,这样我就不必重复编写逻辑了? 例如,我不想在Form 和 a 以及 admin表单中重新实现此逻辑, 并且 模型被重写。 据我所知,Django在全球范围内强制执行这些类型的条件并不容易。 Googling并不是很有帮助,因为“模型验证”通常是指验证特定的模型

  • 当我们在OSB 12c中添加Validate Node以根据XSD验证传入请求时,如果验证失败,则在某些错误消息中会显示导致验证错误的字段名。但仅对于十进制值,错误消息只显示Invalid decimal Value,而没有提及引发错误的字段。我们能克服这个问题吗

  • 我在数据库上实现查询层,使用和Spring Boot项目在sql数据库上执行CRUD操作。在GraphQL模式中,我提到了一些必须的字段,当这些字段在查询中没有提到时,它会以默认格式返回状态代码的错误消息。 错误: 这是我的代码与层架构模式 控制器: 服务: 配置: BookDataFetcher: 上面的代码按预期工作,但我这里的问题是如何自定义错误消息?在错误消息中,我想提及状态,因为这是来自