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

标签 django-forms

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

相关文章:

django - 如何使 Django 模型表单只读?

python - 无法使用基于类的 View 和 django 表单更新数据

python - 没有显示任何错误的 Django 表单无效

Django 表单向导,当我还没有完成时如何重置/清除向导?

javascript - Django:django-autocomplete-light 无法正常工作

django - 带有可选信息的多对多多项选择表

Python/Django 模型覆盖清理后的数据

python - 如何在 Django 表单中添加 truncatechars 过滤器&

python - 在 python 文件中运行 Django 项目时出错

django - 表单中的动态选择字段