我有一个表单,我正在渲染。它还允许用户添加新实例(如果列表中不存在)。
我们可以说这个字段来自name
模式category
。
name
是一个下拉列表,如果用户未在列表中找到他的值,他会将name
写入下一个输入框。
当我验证它时,它失败了。因为它不是category
的实例。
然后我通过使用self.data
得到它,我比较它是否是一个整数?
如果它是一个整数,而不仅仅是一个现有元素,如果没有,用户可能选择了一个新用户,因此从self.data
获取它,我可以创建
category
对象并保存它并用ID替换原始值,以便验证不会失败。
问题。
我知道使用self.data
并将其用于数据库查询可能很危险。由于允许用户在其中输入任何内容,并且它可能会使用该查询清空我的数据库(我已经听过这样的话)。这真的有可能吗?如果是的话,如何避免这种情况。
希望有人能给我一个想法。
答案 0 :(得分:1)
假设您的表单包含现有类别名称的name
字段和输入框的new_name
字段。在您的表单clean()
方法中,您需要检查self.cleaned_data
是否具有new_name
的值,并采取相应措施。你可以这样做:
self.cleaned_data['name'] = self.cleaned_data['new_name']
例如。
除非您覆盖其他字段或表单方法,否则这些字段中的数据是安全的。就恶意输入而言。如果您使用表单ValidationError
方法引发clean()
,则is_valid()
将返回false。所以,只要你:
form = YourForm(...)
if form.is_valid():
form.save()
不会使用无效数据调用save()
。