Merge pull request #2000 from normanjaeckel/VotesQuery
Optimized number of queries for motion serializing. Fixed #1655.
This commit is contained in:
commit
88b2e8a73e
@ -120,25 +120,34 @@ class MotionPollSerializer(ModelSerializer):
|
|||||||
|
|
||||||
def get_yes(self, obj):
|
def get_yes(self, obj):
|
||||||
try:
|
try:
|
||||||
result = obj.get_votes().get(value='Yes').weight
|
result = self.get_votes_dict(obj)['Yes']
|
||||||
except obj.get_vote_class().DoesNotExist:
|
except KeyError:
|
||||||
result = None
|
result = None
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def get_no(self, obj):
|
def get_no(self, obj):
|
||||||
try:
|
try:
|
||||||
result = obj.get_votes().get(value='No').weight
|
result = self.get_votes_dict(obj)['No']
|
||||||
except obj.get_vote_class().DoesNotExist:
|
except KeyError:
|
||||||
result = None
|
result = None
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def get_abstain(self, obj):
|
def get_abstain(self, obj):
|
||||||
try:
|
try:
|
||||||
result = obj.get_votes().get(value='Abstain').weight
|
result = self.get_votes_dict(obj)['Abstain']
|
||||||
except obj.get_vote_class().DoesNotExist:
|
except KeyError:
|
||||||
result = None
|
result = None
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def get_votes_dict(self, obj):
|
||||||
|
try:
|
||||||
|
votes_dict = self._votes_dict
|
||||||
|
except AttributeError:
|
||||||
|
votes_dict = self._votes_dict = {}
|
||||||
|
for vote in obj.get_votes():
|
||||||
|
votes_dict[vote.value] = vote.weight
|
||||||
|
return votes_dict
|
||||||
|
|
||||||
def get_has_votes(self, obj):
|
def get_has_votes(self, obj):
|
||||||
"""
|
"""
|
||||||
Returns True if this poll has some votes.
|
Returns True if this poll has some votes.
|
||||||
|
@ -136,6 +136,24 @@ class CreateMotion(TestCase):
|
|||||||
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||||
|
|
||||||
|
|
||||||
|
class RetrieveMotion(TestCase):
|
||||||
|
"""
|
||||||
|
Tests retrieving a motion (with poll results).
|
||||||
|
"""
|
||||||
|
def setUp(self):
|
||||||
|
self.client = APIClient()
|
||||||
|
self.client.login(username='admin', password='admin')
|
||||||
|
self.motion = Motion(
|
||||||
|
title='test_title_uj5eeSiedohSh3ohyaaj',
|
||||||
|
text='test_text_ithohchaeThohmae5aug')
|
||||||
|
self.motion.save()
|
||||||
|
self.motion.create_poll()
|
||||||
|
|
||||||
|
def test_number_of_queries(self):
|
||||||
|
with self.assertNumQueries(17):
|
||||||
|
self.client.get(reverse('motion-detail', args=[self.motion.pk]))
|
||||||
|
|
||||||
|
|
||||||
class UpdateMotion(TestCase):
|
class UpdateMotion(TestCase):
|
||||||
"""
|
"""
|
||||||
Tests updating motions.
|
Tests updating motions.
|
||||||
|
Loading…
Reference in New Issue
Block a user