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, )
|
||||
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",
|
||||
|
|
|
@ -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:
|
||||
verbose_name = "project"
|
||||
verbose_name_plural = "projects"
|
||||
ordering = ["name"]
|
||||
ordering = ["name", "id"]
|
||||
index_together = [
|
||||
["name", "id"],
|
||||
]
|
||||
|
||||
permissions = (
|
||||
("view_project", "Can view project"),
|
||||
)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue