django - Django:在form_valid中调用类函数
问题描述
我有一个基于类的视图。我想在保存模型时更新模型中的字段。该字段不是用户设置的;这是一个表示表单数据已更改并需要重新批准的字段。我正在考虑的一种方法是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)
解决方案
而不是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()
的 .
推荐阅读
- javascript - Vue.js 下拉菜单,具有跳转到最后一个选定项目的功能
- android - 每次加载片段时不必从 Firebase 加载数据的最佳方法是什么?
- tcp - TCP 发送方是否在计时器到期后重新传输与前一个 SYN 完全相同的 SYN?
- node.js - 基于 http 调用测试 Web 应用的最佳实践
- pycharm - 如何为我的所有快捷方式交换 CTRL/CMD?
- python - 使用 Multiprocessing 和 BeautifulSoup 进行网页抓取,有 MaybeEncodingError 和 RecursionError
- php - 通过日期选择器范围对表进行排序
- python - 如何使用 sklearn 弹性网制作 ROC?
- r - 如何在R中制作具有任意数字的3x3矩阵
- android - 如何在 Android 上构建 HP LinkReader