我有一个基于类的视图。我想在保存模型中的字段时对其进行更新。此字段不是由用户设置的;它是一个说明表单数据已更改并需要重新审批的字段。我正在考虑的一种方法是在def form_valid
中查询模型并将字段设置为所需的值。我正在运行的查询也在这个类上定义的函数中。我可以在def form_valid
中运行这个函数而不是实现它吗?我所有的尝试都证明是徒劳的。
class CUpdateView(LoginRequiredMixin, UpdateView):
def get_object(self):
qs = C.objects.filter(
c_id = self.kwargs.get('c_id')
)
if qs.count() == 1:
if self.request.user == qs.first().a.user or self.request.user == qs.first().inhouselandmanager.user:
pass
else:
raise PermissionDenied
return qs.first()
raise Http404
def form_valid(self, form):
if self.object.status != 'initiated':
return HttpResponseRedirect(reverse('c:detail', kwargs={'c_id': str(self.object.c_id) }))
qs = super().get_object()
qs.update(approved=False)
return super().form_valid(form)
发布于 2018-06-12 10:08:49
使用self.get_object()
代替将调用父类的get_objects
的super().get_object()
def form_valid(self, form):
if self.object.status != 'initiated':
return HttpResponseRedirect(reverse('c:detail', kwargs={'c_id': str(self.object.c_id) }))
qs = self.get_object()
qs.approved=False
qs.save()
return super().form_valid(form)
另外,由于qs
是单个对象,因此不能对其使用update()
方法。只要使用普通的save()
即可。
发布于 2018-06-12 16:56:31
不要从那里获取对象,而是从form.instance
获取。update
是查询集上的方法,而不是模型实例;只需直接分配属性即可。
def form_valid(self, form):
if self.object.status != 'initiated':
return HttpResponseRedirect(reverse('c:detail', kwargs={'c_id': str(self.object.c_id) }))
form.instance.approved = False
return super().form_valid(form)
https://stackoverflow.com/questions/50807418
复制相似问题