我有一个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);
答案 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
输入错误,则可以在其中输入字段名称。