基于Django类的视图:在调度中验证对象 [英] Django Class Based View: Validate object in dispatch

查看:126
本文介绍了基于Django类的视图:在调度中验证对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有一种确定的方法,当在$ / code> self.get_object()稍后在get / post中调用时,我会在调度中验证一个对象而不进行额外的数据库调用? / p>

这是我到目前为止(这个问题略有改变):

  class CourseUpdateView(UpdateView):
def dispatch(self,request,* args,** kwargs):

self.request = request
self.kwargs = kwargs
self.object = self.get_object()

如果self.object.is_online:
messages.warning(请求,抱歉这个不能更新)
return redirect(course:detail,pk = self.kwargs ['pk'])

#这将要调用self.get_object不是吗?
返回UpdateView.dispatch(self,request,* args,** kwargs)


解决方案

您可以缓存 get_object()的结果。



例如:

  class CourseUpdateView(UpdateView):
#[...]您的调度方法

def get_object(self):
#每个请求调用get_object多少次
#不应该多个请求
如果不是hasattr(self, '_object'):
self._object = super(CourseUpdateView,self).get_object()
return self._object


Is there a established way that i validate an object in the dispatch without making an extra database call when self.get_object() is called later in get/post?

Here is what i have so far (slightly altered for this question):

class CourseUpdateView(UpdateView):
    def dispatch(self, request, *args, **kwargs):

        self.request = request
        self.kwargs = kwargs
        self.object = self.get_object()

        if self.object.is_online:
            messages.warning(request, "Sorry this one can't be updated")
            return redirect("course:detail", pk=self.kwargs['pk'])

        # this is going to call self.get_object again isn't it?
        return UpdateView.dispatch(self, request, *args, **kwargs)

解决方案

You can cache the result of get_object().

Here's a trivial example:

class CourseUpdateView(UpdateView):
    # [...] your dispatch method

    def get_object(self):
        # it doesn't matter how many times get_object is called per request
        # it should not do more than one request
        if not hasattr(self, '_object'):
            self._object = super(CourseUpdateView, self).get_object()
        return self._object

这篇关于基于Django类的视图:在调度中验证对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆