django - Django DRF 在错误消息中显示字段的详细名称
问题描述
当模型字段验证失败时,我希望 DRF 在错误消息中返回字段 verbose_name。
例子 :
模型.py:
class MyClass(models.Model):
myfield = model.CharField(max_length=20,\
verbose_name="This is the field",\
default="blabla")
serialiers.py :
class MyClassSerializer(serializers.ModelSerializer):
class Meta:
model = MyClass
fields = ('myfield',)
如果此字段的 POSTED 数据超过 20 个字符,则响应负载为:
{"myfield":["the error message..........."]}
为了为用户提供更友好的消息(...并轻松管理错误:-)),我想使用模型字段的 verbose_name,因此响应有效负载将是:
{"This is the field":["the error message..........."]}
你有什么主意吗?谢谢!
解决方案
我认为没有一种简单的方法可以做到这一点。最简单的方法是覆盖errors
序列化程序的属性并使用详细名称更改错误键。
class TestSerializer(serializers.ModelSerializer):
class Meta:
model = ...
fields = ('field1', ...)
@property
def errors(self):
# get errors
errors = super().errors
verbose_errors = {}
# fields = { field.name: field.verbose_name } for each field in model
fields = {field.name: field.verbose_name for field in
self.Meta.model._meta.get_fields() if hasattr(field, 'verbose_name')}
# iterate over errors and replace error key with verbose name if exists
for field_name, error in errors.items():
if field_name in fields:
verbose_errors[str(fields[field_name])] = error
else:
verbose_errors[field_name] = error
return verbose_errors
推荐阅读
- git - 存储库 [名称] 已停用,无法重复使用
- flutter - 如何使用修复项目列表设置 Streambuilder
- c++ - C++ 是否保证参数评估的原子性?
- python - 为什么我提示说scrapy中@class的语法无效?
- python - 从带有符号字符的字符串换行中提取整数的有效方法是什么?
- pip - windows Pycharm项目解释器没什么可显示的
- r - 无法在 R studio 中分配 2.8Gb 错误的向量
- c++ - 递归中的段错误,当尝试在 C++ 中的数独求解器算法中回溯时
- python - 合并/分组类实例
- android - Android Studio 4.0 未显示构建错误详细信息