我有一个DetailView,如果url命中一次,它会运行两次
views.py
class PortfolioDetailedView(DetailView):
model = Portfolio
slug_field = 'slug'
def get_object(self):
obj = super().get_object()
obj.view_count+=1
obj.save()
return get_object()
获取数据时记录日志
[17/Jul/2020 19:53:18] "GET /portfolio/detail/test2/ HTTP/1.1" 200 14893
[17/Jul/2020 19:53:20] "GET /portfolio/detail/test2/ HTTP/1.1" 200 14893
在示例中返回get_object()
而不是obj
可能会导致一些问题,并且感觉有点多余。 如果要在视图中执行某些业务逻辑,重写更高级的get
或dispatch
方法并使用get_object
对我来说会更自然一些:
class PortfolioDetailedView(DetailView):
model = Portfolio
slug_field = 'slug'
def dispatch(self, request, pk, *args, **kwargs):
obj = self.get_object()
obj.view_count += 1
obj.save()
return super().dispatch(request, *args, **kwargs)