忽略我在下面用于解析错误消息的实际方法,因为它需要大量改进以使其更通用,解析像这样引发的错误消息是更改显示的错误消息的唯一方法吗?
具体来说,我从 ModelForm 中删除了其中一个字段。运行 validate_unique 时,我会从验证中删除该字段,如关于 SO的答案中所述。运行 validate_unique 时 Django 在表单上显示的错误消息说:“带有这个 Y 和 Z 的 X 已经存在。” 其中 Z 是我从 ModelForm 中手动删除的字段。我想更改此错误消息,因为提及未显示的字段 Z 会使无法更改此表单上的 Z 的用户感到困惑。
这感觉很脆弱和hacky。
def validate_unique(self):
exclude = self._get_validation_exclusions()
exclude.remove('a_field_not_shown_on_form')
try:
self.instance.validate_unique(exclude=exclude)
except ValidationError, e:
if '__all__' in e.message_dict:
for idx, err in enumerate(e.message_dict['__all__']):
for unique_together in self.instance._meta.unique_together:
if 'a_field_not_shown_on_form' not in unique_together:
continue
if err.lower() == '{} with this {} and {} already exists.'.format(self.instance.__class__.__name__,
unique_together[0],
unique_together[1]).lower():
e.message_dict['__all__'][idx] = '{} with this {} already exists in {}'.format(self.instance.__class__.__name__,
unique_together[0].capitalize(),
self.instance.complex.name)
self._update_errors(e.message_dict)