我有一个表单,可以在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
但是现在我问自己:如何用干净的方法判断用户是尝试创建新关系还是更新关系。因为使用此干净方法无法进行更新,因为它会返回错误消息,表明该条目已存在。
最佳答案
您可以尝试更改此设置:
if ProjectMembership.objects.filter(project=project, member=member).count() > 0:
像这样:
if ProjectMembership.objects.filter(project=project, member=member).exclude(pk=self.instance.id).count() > 0:
实际上,在排除中使用self.instance之前,您需要检查self.instance是否不是None,但希望这个小片段可以让您了解如何在不重复表格的情况下完成任务。
关于django-forms - django-如何检查表单的干净方法是插入还是更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2118668/