1 つの特定のデータの値が既に存在し、存在する場合はエラーが発生する場合にデータベースを調べるカスタム クリーニング メソッドを作成しようとしています。他のクラス (プロジェクト) から継承しているクラス (サブシステム) のモデル形式を使用しています。フォームに新しいシステムを追加しようとしたときに、sybsystem が既に存在するかどうかを確認したいと考えています。
ビュー関数でプロジェクト名を取得します。
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()
これは機能しておらず、どうすればよいかわかりません。私はエラーがあります: clean() は正確に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)