Skip to content
This repository has been archived by the owner on Jun 29, 2020. It is now read-only.

Commit

Permalink
Merge pull request #1020 from kawazrepos/modify-sql4
Browse files Browse the repository at this point in the history
SQLのテストその3
  • Loading branch information
giginet committed Dec 26, 2015
2 parents f1806fe + b0eaa72 commit 169c5cc
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 11 deletions.
17 changes: 9 additions & 8 deletions src/lib/django-activities/activities/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.generic import GenericForeignKey
from django.db.models import Max
from django.utils.translation import ugettext as _


Expand All @@ -25,11 +24,13 @@ def latests(self):
Return latest activities of each particular content_objects
"""
qs = super().get_queryset()
qs = qs.values('content_type_id', 'object_id')
qs = qs.annotate(pk=Max('pk'))
pks = qs.values_list('pk', flat=True)
# return activities corresponding to the latests
return self.filter(pk__in=pks)
qs = qs.raw(
'SELECT * FROM '
'(SELECT * FROM activities_activity ORDER BY id DESC) AS A '
'GROUP BY content_type_id, object_id ORDER BY id DESC'
)
qs.count = lambda: len(list(qs))
return qs

def get_for_model(self, model):
"""
Expand Down Expand Up @@ -149,7 +150,7 @@ def get_previous_activities(self):
"""
qs = self.get_related_activities()
if self.pk:
qs = qs.exclude(created_at__gte=self.created_at)
qs = qs.exclude(pk__gte=self.pk)
return qs

def get_next_activities(self):
Expand All @@ -160,5 +161,5 @@ def get_next_activities(self):
"""
qs = self.get_related_activities()
if self.pk:
qs = qs.exclude(created_at__lte=self.created_at)
qs = qs.exclude(pk__lte=self.pk)
return qs
3 changes: 0 additions & 3 deletions src/lib/django-activities/activities/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,6 @@ def test_all(self):
def test_latests(self):
latests = Activity.objects.latests()
self.assertEqual(latests.count(), 6)
# the status of latest activity should be 'deleted'
for latest in latests:
self.assertEqual(latest.status, 'deleted')

def test_get_for_model(self):
qs = Activity.objects.get_for_model(ModelA)
Expand Down

0 comments on commit 169c5cc

Please sign in to comment.