强制 django UpdateView 创建一个新对象

cms*_*mgr 3 django

我有一个模型,该模型将在其整个生命周期内进行更新。我希望每次更新都基于旧对象返回一个新对象,而不是更新原始对象。这是为了向用户提供先前的对象作为参考,同时确保他们不会覆盖它。我尝试使用相同的表单,这个问题建议它可能会实现我想要的,但它没有(它更新了)。然后我尝试重写 save 方法以指向我的 CreateView,如下面的代码所示,但这告诉我它需要一个 CreateView 实例作为其第一个参数。有没有办法获得我想要的行为?

class TriageUpdateView(PermissionRequiredMixin, UpdateView):
    model = Triage
    form_class = TriageForm
    login_url = "/login/"
    permission_required = "myapp.add_triage"

    def form_valid(self, form):
        obj = form.save(commit = False)
        obj.completed_by = self.request.user.person
        return TriageCreateView.form_valid(self, form)
Run Code Online (Sandbox Code Playgroud)

cms*_*mgr 5

我找到了一种方法,尽管我不确定这是最好的方法。Django 通过检查主键值来决定是否更新或插入数据库。我在验证中将其设置为None,这就完成了。

class TriageUpdateView(PermissionRequiredMixin, UpdateView):
    model = Triage
    form_class = TriageForm
    login_url = "/login/"
    permission_required = "myapp.add_triage"

    def form_valid(self, form):
        obj = form.save(commit = False)
        obj.pk = None
        obj.completed_by = self.request.user.person
        return super(TriageUpdateView, self).form_valid(form)
Run Code Online (Sandbox Code Playgroud)