Commit d323564f0cb891b2285e7dda8e19ea1ce0cabe8d

Authored by Luan
2 parents 514437ff 703bf89c

Merge branch 'master' of github.com:TracyWebTech/colab

src/hitcount/models.py
@@ -45,7 +45,11 @@ class HitCountModelMixin(object): @@ -45,7 +45,11 @@ class HitCountModelMixin(object):
45 cache.set(cache_key, True) 45 cache.set(cache_key, True)
46 46
47 # Everything ok, so just increment the page count 47 # Everything ok, so just increment the page count
48 - hit_ = Hit.objects.get_or_create(content_type=content_type,  
49 - object_pk=self.pk)[0]  
50 - hit_.hits += 1  
51 - hit_.save() 48 + hit_pk = Hit.objects.get_or_create(content_type=content_type,
  49 + object_pk=self.pk)[0].pk
  50 +
  51 + # Using this way instead of hits += 1 forces django to
  52 + # call the UPDATE directly in the database avoiding
  53 + # cuncurrency problems
  54 + Hit.objects.filter(pk=hit_pk).update(hits=models.F("hits") + 1)
  55 +
src/hitcount/views.py
1 from django.shortcuts import render 1 from django.shortcuts import render
2 2
3 class HitCountViewMixin(object): 3 class HitCountViewMixin(object):
4 - def get_object(self):  
5 - raise NotImplementedError 4 + def get_object(self, *args, **kwargs):
  5 + try:
  6 + super(HitCountViewMixin, self).get_object(*args, **kwargs)
  7 + except AttributeError:
  8 + raise NotImplementedError
6 9
7 def dispatch(self, request, *args, **kwargs): 10 def dispatch(self, request, *args, **kwargs):
8 response = super(HitCountViewMixin, self).dispatch(request, 11 response = super(HitCountViewMixin, self).dispatch(request,
src/super_archives/views.py
@@ -30,8 +30,7 @@ def thread(request, mailinglist, thread_token): @@ -30,8 +30,7 @@ def thread(request, mailinglist, thread_token):
30 30
31 thread = Thread.objects.get(subject_token=thread_token, 31 thread = Thread.objects.get(subject_token=thread_token,
32 mailinglist__name=mailinglist) 32 mailinglist__name=mailinglist)
33 -  
34 - thread.hit() 33 + thread.hit(request)
35 34
36 order_by = request.GET.get('order') 35 order_by = request.GET.get('order')
37 if order_by == 'voted': 36 if order_by == 'voted':