Task #3602: Order project list alphabetically by default
parent
0b7fe02a6f
commit
f61a811fd1
|
@ -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",
|
||||||
|
|
|
@ -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')]),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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"),
|
||||||
)
|
)
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue