Django:检查用户是否在表单中添加了新实例?

时间:2014-03-25 12:56:33

标签: python django models

我有一个表单,我正在渲染。它还允许用户添加新实例(如果列表中不存在)。 我们可以说这个字段来自name模式category

name是一个下拉列表,如果用户未在列表中找到他的值,他会将name写入下一个输入框。

当我验证它时,它失败了。因为它不是category的实例。 然后我通过使用self.data得到它,我比较它是否是一个整数?

如果它是一个整数,而不仅仅是一个现有元素,如果没有,用户可能选择了一个新用户,因此从self.data获取它,我可以创建  category

对象并保存它并用ID替换原始值,以便验证不会失败。

问题。

我知道使用self.data并将其用于数据库查询可能很危险。由于允许用户在其中输入任何内容,并且它可能会使用该查询清空我的数据库(我已经听过这样的话)。这真的有可能吗?如果是的话,如何避免这种情况。

希望有人能给我一个想法。

1 个答案:

答案 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()