我想創建一個自定義清理方法,它在db中查看某個特定數據的值是否已經存在,如果是,則會引發錯誤。 我正在使用從其他類(項目)繼承的類(子系統)的模型形式。 我想檢查sybsystem是否已經存在或沒有,當我嘗試在表單中添加一個新的。Django:通過以模型形式查詢數據庫來驗證數據(使用自定義清理方法)
我在我的視圖函數中獲取項目名稱。
class SubsytemForm(forms.ModelForm):
class Meta:
model = Subsystem
exclude = ('project_name')
def clean(self,project_name):
cleaned_data = super(SubsytemForm, self).clean(self,project_name)
form_subsystem_name = cleaned_data.get("subsystem_name")
Subsystem.objects.filter(project__project_name=project_name)
subsystem_objects=Subsystem.objects.filter(project__project_name=project_name)
nb_subsystem = subsystem_objects.count()
for i in range (nb_subsystem):
if (subsystem_objects[i].subsystem_name==form_subsystem_name):
msg = u"Subsystem already existing"
self._errors["subsystem_name"] = self.error_class([msg])
# These fields are no longer valid. Remove them from the
# cleaned data.
del cleaned_data["subsystem_name"]
return cleaned_data
我的看法功能:
def addform(request,project_name):
if form.is_valid():
form=form.save(commit=False)
form.project_id=Project.objects.get(project_name=project_name).id
form.clean(form,project_name)
form.save()
這不是工作,我不知道該怎麼辦。 我有錯誤:乾淨的()到底需要2個參數(1給出)
我的模型:
class Project(models.Model):
project_name = models.CharField("Project name", max_length=20)
Class Subsystem(models.Model):
subsystem_name = models.Charfield("Subsystem name", max_length=20)
projects = models.ForeignKey(Project)
某種類型的堆棧跟蹤的可能是有用的。此外,我不確定是否可以從cleared_data數組中刪除密鑰。也許只是將其設置爲空或空字符串?然後在你的is_valid方法中,將project_name添加到form.clean方法中,但是我沒有看到它在代碼中的任何位置被定義? – 2012-07-20 12:56:33
這只是一個錯誤。我想檢查表單中輸入的子系統名稱是否已被使用,因爲它必須是唯一的。 – user1507156 2012-07-20 13:02:18
我使用is_valid方法,它是由django提供的默認方法來檢查數據是否正確 – user1507156 2012-07-20 13:47:09