Django自定义验证错误,格式不变

时间:2018-10-25 11:23:06

标签: django django-forms

我有一个form,其中有三个CharField。它会加载现有对象。我正在尝试编写一个自定义validation,如果用户尝试提交error而未进行任何更改,则该自定义form会返回“未进行任何更改” form = Form(instance=id) if request.POST.form == form: raise ValidationError( _('No changes made to name.'), code: 'No_changes' ) 。有没有一种方法可以比较初始表单和更新表单,而无需遍历每个字段?像这样:

$body = array(
  "serverId" => "Server",
  "featureId" => "Feature",
  "propertyId" => "Property",
);

$body = json_encode($body);

2 个答案:

答案 0 :(得分:0)

当用户提交表单时,它将首先保存在DB中。 因此,您可以做的是覆盖save_post_clean()并编写这些验证,而不是比较表单。

def __post_clean(self):
  # fetch from db the existing values and compare 
  # if matches
  #  self.add_error('field_name','No changes made.')

这也可以使用JS在前端进行(如果字段中的值已更改,则在提交之前)。

答案 1 :(得分:0)

因此,将其添加到我的视图实际上很简单:

if request.POST:
    name_form = NameForm(data=request.POST, instance=name)
    if name_form.has_changed() == False:
        name_form.add_error(None, _('No changes made.'))
    if name_form.is_valid():
        name_form.save()

None放在.add_error()中使其成为non-field error。如果您要为特定的field输入错误,则可以在其中输入字段名称。