我有一个基于类的视图。我希望在保存时更新模型中的字段。该字段不是由用户设置的;它是一个字段,表示表单数据已更改,需要重新批准。我正在考虑解决这个问题的一种方法是在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)
答案 0 :(得分:0)
使用super().get_object()
代替get_objects
调用父类的self.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()
方法。只需使用普通{{1}}。
答案 1 :(得分:0)
不要从那里获取对象,从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)