【发布时间】:2010-01-22 16:20:57
【问题描述】:
我有一个表单,我在 clean 方法中验证 ProjectMembership 对象是否已经存在,该对象具有相同的项目和成员值。这是因为我在 ProjectMembership 模型中为项目和成员定义了一个 unique_together 约束。这实际上工作正常。
class ProjectMembershipForm(forms.ModelForm):
project = forms.ModelChoiceField(Project.objects, widget=HiddenInput())
class Meta:
model = ProjectMembership
def clean(self):
cleaned_data = self.cleaned_data
project = cleaned_data.get("project")
member = cleaned_data.get("member")
print ProjectMembership.objects.filter(project=project, member=member).count()
if ProjectMembership.objects.filter(project=project, member=member).count() > 0:
del cleaned_data["project"]
del cleaned_data["member"]
raise forms.ValidationError('The user "%s" is already part of the project team for project "%s".' % (member, project))
return cleaned_data
但现在我问自己如何在 clean 方法中判断用户是尝试创建新关系还是更新关系。因为使用这种 clean 方法无法进行更新,因为它返回条目已存在的错误消息。
【问题讨论】:
-
您找到解决方案了吗?尝试自己做同样的事情,但找不到解决方案。
-
没有没有想出解决办法。我现在只使用两种形式,一种用于更新,一种用于插入。在更新表单中,您必须禁用唯一的共同字段,以确保您不违反此约束。这种方法的缺点是您无法更新具有唯一约束的字段..
标签: django-forms