如何在Woost中定制验证错误信息

2024-05-15 04:33:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个模式为schema.Date的模型,该成员对其最大允许值有限制。验证工作正常,但我需要为生成的错误显示不同的翻译

我可以为我的模型自定义鸡尾酒.schema.exceptions.MaxValueError错误的翻译吗


Tags: 模型dateschema错误模式成员exceptions鸡尾酒
1条回答
网友
1楼 · 发布于 2024-05-15 04:33:52

这是可以做到的,但是在woost 2.11“pacman”和更新版本之后,确切的过程会有一些变化。此外,如果您不熟悉如何为模式成员获取翻译,那么可能会觉得有点复杂

要定义与此模式匹配的转换键:

Pacman及更新版本:

myapp.models.mymodule.MyModel.members.my_member.errors.cocktail.schema.exceptions.MaxValueError

旧版本:

MyModel.my_member-error: cocktail.schema.exceptions.MaxValueError

请注意,键如何将成员的名称与要定义其描述的异常类型组合在一起

请注意,尽管与以前版本中使用的更紧凑的模式相比,Pacman约定似乎过长,但它应用了适当的名称空间以避免命名冲突,而且它还利用了新的.strings文件格式,允许您编写如下内容:

[myapp.models.mymodule.MyModel]

    [members]

        [my_member]
        # Your member's name, and other related strings

            [errors]
            # You can put all your error customizations here

                [cocktail.schema.exceptions.MaxValueError]
                en: Member XYZ is too high!
                es: El campo XYZ es demasiado grande!

在旧版本上的等效方法是在strings.py文件中添加以下内容:

translations.define(
    "MyModel.my_member-error: cocktail.schema.exceptions.MaxValueError",
    en = u"Member XYZ is too high!",
    es = u"El campo XYZ es demasiado grande!"
)

无论使用哪个版本,都可以查看cocktail.schema.Member.translate_error方法,了解鸡尾酒在引擎盖下的作用,以获得翻译

此外,如果您正在处理验证错误,则可能正在使用模式适配器。如果是这种情况,您将需要考虑您的自定义翻译是否属于模型或适应的表单模式,这取决于您的自定义是否适合此字段产生此错误的任何场景,或者它是否仅适用于您的特定表单。如果要将其限制在表单中,请将myapp.models.MyModel替换为表单的限定名称

最后,您可能希望使用动态翻译,将错误对象的详细信息包括在翻译中:

Pacman及更新版本:

[myapp.models.mymodule.MyModel]

    [members]

        [my_member]
        # Your member's name, and other related strings

            [errors]
            # You can put all your error customizations here

                [cocktail.schema.exceptions.MaxValueError(member, error)]
                en: Member t{member} is too high! The maximum permitted value is ${member.translate_value(error.max)}
                es: El campo t{member} es demasiado grande! El valor máximo permitido es ${member.translate_value(error.max)}

旧版本:

translations.define(
    "MyModel.my_member-error: cocktail.schema.exceptions.MaxValueError",
    en = lambda instance: u"Member %s is too high! The maximum allowed value is %s" % (translations(instance.member, instance.member.translate_value(instance.max))),
    es = lambda instance: u"El campo %s es demasiado grande! El valor máximo permitido es %s" % (translations(instance.member, instance.member.translate_value(instance.max))),
)

相关问题 更多 >

    热门问题