gpt4 book ai didi

django - 强制 django UpdateView 创建一个新对象

转载 作者:行者123 更新时间:2023-12-02 21:45:57 24 4
gpt4 key购买 nike

我有一个将在其整个生命周期内更新的模型。我希望每次更新都返回一个基于旧对象的新对象,而不是更新原始对象。这是为了向用户提供以前的对象作为引用,同时确保他们不会覆盖它。我尝试使用相同的表格,this question suggested 可能会完成我想要的,但它没有(它更新了)。然后我尝试重写保存方法以指向我的 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)

最佳答案

我找到了一种方法,尽管我不确定这是最好的方法。 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)

关于django - 强制 django UpdateView 创建一个新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19519574/

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