gpt4 book ai didi

django-forms - django-如何检查表单的干净方法是插入还是更新

转载 作者:行者123 更新时间:2023-12-04 09:22:11 25 4
gpt4 key购买 nike

我有一个表单,可以在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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com