Change default filtering system to more simple method.

remotes/origin/enhancement/email-actions
Andrey Antukh 2013-03-28 12:10:37 +01:00
parent 1a052a080c
commit fe0cbbc6e1
3 changed files with 48 additions and 18 deletions

View File

@ -4,6 +4,34 @@ from greenmine.scrum.serializers import *
from greenmine.scrum.models import *
class SimpleFilterMixin(object):
filter_fields = []
filter_special_fields = []
_special_values_dict = {
'true': True,
'false': False,
'null': None,
}
def get_queryset(self):
queryset = super(SimpleFilterMixin, self).get_queryset()
query_params = {}
for field_name in self.filter_fields:
if field_name in self.request.QUERY_PARAMS:
field_data = self.request.QUERY_PARAMS[field_name]
if field_data in self._special_values_dict:
query_params[field_name] = self._special_values_dict[field_data]
else:
query_params[field_name] = field_data
if query_params:
queryset = queryset.filter(**query_params)
return queryset
class ProjectList(generics.ListCreateAPIView):
model = Project
serializer_class = ProjectSerializer
@ -14,7 +42,7 @@ class ProjectDetail(generics.RetrieveUpdateDestroyAPIView):
serializer_class = ProjectSerializer
class MilestoneList(generics.ListCreateAPIView):
class MilestoneList(SimpleFilterMixin, generics.ListCreateAPIView):
model = Milestone
serializer_class = MilestoneSerializer
filter_fields = ('project',)
@ -25,7 +53,7 @@ class MilestoneDetail(generics.RetrieveUpdateDestroyAPIView):
serializer_class = MilestoneSerializer
class UserStoryList(generics.ListCreateAPIView):
class UserStoryList(SimpleFilterMixin, generics.ListCreateAPIView):
model = UserStory
serializer_class = UserStorySerializer
filter_fields = ('project', 'milestone')
@ -89,7 +117,7 @@ class IssueStatusDetail(generics.RetrieveUpdateDestroyAPIView):
serializer_class = IssueStatusSerializer
class TaskStatusList(generics.ListCreateAPIView):
class TaskStatusList(SimpleFilterMixin, generics.ListCreateAPIView):
model = TaskStatus
serializer_class = TaskStatusSerializer
filter_fields = ('project',)

View File

@ -29,22 +29,22 @@ subjects = [
class Command(BaseCommand):
def create_user(self, counter):
user = User.objects.create(
username='user%d' % (counter),
first_name='user%d' % (counter),
email='foouser%d@domain.com' % (counter),
)
user.set_password('user%d' % (counter))
user.save()
return user
@transaction.commit_on_success
def handle(self, *args, **options):
def create_user(counter):
user = User(
username='user%d' % (counter),
first_name='user%d' % (counter),
email='foouser%d@domain.com' % (counter),
)
user.set_password('user%d' % (counter))
user.save()
return user
users = []
for x in range(10):
users.append(create_user(x))
users.append(self.create_user(x))
# projects
for x in xrange(3):
@ -128,12 +128,13 @@ class Command(BaseCommand):
for y in xrange(20):
bug = Issue.objects.create(
project=project,
severity=Severity.objects.get(project=project, order=2),
priority=Priority.objects.get(project=project, order=3),
type=IssueType.objects.get(project=project, order=1),
subject=lorem_ipsum.words(random.randint(1, 5), common=False),
description=lorem_ipsum.words(random.randint(1, 15), common=False),
owner=project.owner,
severity=Severity.objects.get(project=project, order=2),
status=IssueStatus.objects.get(project=project, order=4),
priority=Priority.objects.get(project=project, order=2),
type=IssueType.objects.get(project=project, order=1),
tags=[],
)

View File

@ -38,6 +38,7 @@ class UserStorySerializer(serializers.ModelSerializer):
class Meta:
model = UserStory
fields = ()
depth = 0
class ChangeSerializer(serializers.ModelSerializer):