我有以下类:Django:DetailView,在哪里更新计数器?
class ImageGalleryDetail(DetailView):
model = ImageGallery
template_name = 'galleries/imagegallery_detail.html'
def get_context_data(self, **kwargs):
context = super(ImageGalleryDetail, self).get_context_data(**kwargs)
context['image'] = self.object
context['gallery'] = self.object.owner_gallery
return context
def update_counter(self):
self.object.hits = F('hits') + 1
self.object.save()
正如你可以看到我有一个名为update_counter()
方法,我使用了F expression
原子地更新计数器。
我的问题是,我应该在哪里找到对此函数的调用?我看到它的方式,我可以找到它在get_context_data()
方法,但它听起来很奇怪,方法的名称开始得到不集。而且我觉得我不应该节省模式相关的东西在里面......
的DetailView的Method Flowchart如下(这里初学者!):
1. dispatch()
2. http_method_not_allowed()
3. get_template_names()
4. get_slug_field()
5. get_queryset()
6. get_object()
7. get_context_object_name()
8. get_context_data()
9. get()
10. render_to_response()
所以,我真的不知道用什么方法应我覆盖以便拨打update_counter
功能。任何帮助,将不胜感激。或者,如果这是做错事情的方式......我也想知道! :)
你最好定义这个计数器法到模型ImageGallery本身或定义自定义管理它。以防万一保持逻辑不在视图部分。 – sheshkovsky
@sheshkovsky我分享你的想法。你想分享如何在模型ImageGallery本身做到这一点最简单的例子吗?我会很感激,并接受它作为我的问题的答案:-) – gglasses
我写了我的想法作为答案。但是我不确定你应该在你的观点中把这些方法称为什么。 – sheshkovsky