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, )
filter_backends = (filters.CanViewProjectObjFilterBackend,)
filter_fields = (('member', 'members'),
'is_looking_for_people',
'is_featured',
'is_backlog_activated',
'is_kanban_activated')
filter_fields = (("member", "members"),
"is_looking_for_people",
"is_featured",
"is_backlog_activated",
"is_kanban_activated")
ordering = ("name", "id")
order_by_fields = ("memberships__user_order",
"total_fans",
"total_fans_last_week",
@ -94,7 +95,7 @@ class ProjectViewSet(LikedResourceMixin, HistoryResourceMixin, ModelCrudViewSet)
def get_queryset(self):
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
qs = qs.prefetch_related("members")
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:
verbose_name = "project"
verbose_name_plural = "projects"
ordering = ["name"]
ordering = ["name", "id"]
index_together = [
["name", "id"],
]
permissions = (
("view_project", "Can view project"),
)

View File

@ -492,3 +492,20 @@ def test_remove_project_with_logo(client):
response = client.delete(url)
assert response.status_code == 204
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