Task #3602: Order project list alphabetically by default

remotes/origin/logger
David Barragán Merino 2015-12-02 12:55:02 +01:00
parent 0b7fe02a6f
commit f61a811fd1
4 changed files with 51 additions and 7 deletions

View File

@ -69,12 +69,13 @@ class ProjectViewSet(LikedResourceMixin, HistoryResourceMixin, ModelCrudViewSet)
permission_classes = (permissions.ProjectPermission, ) permission_classes = (permissions.ProjectPermission, )
filter_backends = (filters.CanViewProjectObjFilterBackend,) filter_backends = (filters.CanViewProjectObjFilterBackend,)
filter_fields = (('member', 'members'), filter_fields = (("member", "members"),
'is_looking_for_people', "is_looking_for_people",
'is_featured', "is_featured",
'is_backlog_activated', "is_backlog_activated",
'is_kanban_activated') "is_kanban_activated")
ordering = ("name", "id")
order_by_fields = ("memberships__user_order", order_by_fields = ("memberships__user_order",
"total_fans", "total_fans",
"total_fans_last_week", "total_fans_last_week",
@ -94,7 +95,7 @@ class ProjectViewSet(LikedResourceMixin, HistoryResourceMixin, ModelCrudViewSet)
def get_queryset(self): def get_queryset(self):
qs = super().get_queryset() qs = super().get_queryset()
# Prefetch doesn't work correctly if then if the field is filtered later (it generates more queries) # Prefetch doesn"t work correctly if then if the field is filtered later (it generates more queries)
# so we add some custom prefetching # so we add some custom prefetching
qs = qs.prefetch_related("members") qs = qs.prefetch_related("members")
qs = qs.prefetch_related(Prefetch("notify_policies", qs = qs.prefetch_related(Prefetch("notify_policies",

View File

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('projects', '0031_project_logo'),
]
operations = [
migrations.AlterModelOptions(
name='project',
options={'permissions': (('view_project', 'Can view project'),), 'ordering': ['name', 'id'], 'verbose_name': 'project', 'verbose_name_plural': 'projects'},
),
migrations.AlterIndexTogether(
name='project',
index_together=set([('name', 'id')]),
),
]

View File

@ -266,7 +266,11 @@ class Project(ProjectDefaults, TaggedMixin, models.Model):
class Meta: class Meta:
verbose_name = "project" verbose_name = "project"
verbose_name_plural = "projects" verbose_name_plural = "projects"
ordering = ["name"] ordering = ["name", "id"]
index_together = [
["name", "id"],
]
permissions = ( permissions = (
("view_project", "Can view project"), ("view_project", "Can view project"),
) )

View File

@ -492,3 +492,20 @@ def test_remove_project_with_logo(client):
response = client.delete(url) response = client.delete(url)
assert response.status_code == 204 assert response.status_code == 204
assert not any(list(map(os.path.exists, original_photo_paths))) assert not any(list(map(os.path.exists, original_photo_paths)))
def test_project_list_without_search_query_order_by_name(client):
user = f.UserFactory.create(is_superuser=True)
project3 = f.create_project(name="test 3 - word", description="description 3", tags=["tag3"])
project1 = f.create_project(name="test 1", description="description 1 - word", tags=["tag1"])
project2 = f.create_project(name="test 2", description="description 2", tags=["word", "tag2"])
url = reverse("projects-list")
client.login(user)
response = client.json.get(url)
assert response.status_code == 200
assert response.data[0]["id"] == project1.id
assert response.data[1]["id"] == project2.id
assert response.data[2]["id"] == project3.id