1
0
mirror of https://github.com/django/django.git synced 2025-07-07 19:29:12 +00:00

Test cases added for custom ordering

This commit is contained in:
Krishna2864 2023-12-02 14:11:50 +05:30
parent 27252c911d
commit caeabd46d7
2 changed files with 60 additions and 0 deletions

View File

@ -36,3 +36,18 @@ class DynOrderingBandAdmin(admin.ModelAdmin):
return ["rank"]
else:
return ["name"]
class UserPermission(models.Model):
permission = models.CharField(max_length=50)
class SystemUser(models.Model):
name = models.CharField(max_length=50)
permissions = models.ManyToManyField(
UserPermission,
help_text="Specific permissions for this user.",
)
class ReportData(models.Model):
title = models.CharField(max_length=255)
owner = models.ForeignKey(SystemUser, on_delete=models.CASCADE)

View File

@ -3,6 +3,8 @@ from django.contrib.admin.options import ModelAdmin
from django.contrib.auth.models import User
from django.db.models import F
from django.test import RequestFactory, TestCase
from django.db import models
from .models import (
Band,
@ -10,6 +12,10 @@ from .models import (
Song,
SongInlineDefaultOrdering,
SongInlineNewOrdering,
SystemUser,
UserPermission,
ReportData
)
@ -206,3 +212,42 @@ class TestRelatedFieldsAdminOrdering(TestCase):
site.register(Band, StaticOrderingBandAdmin)
self.check_ordering_of_field_choices([self.b2])
class TestCustomAdminOrdering(TestCase):
@classmethod
def setUpTestData(cls):
# Create permissions
perm1 = UserPermission.objects.create(permission='Permission 1')
perm2 = UserPermission.objects.create(permission='Permission 2')
perm3 = UserPermission.objects.create(permission='Permission 3')
# Create users with permissions
cls.user1 = SystemUser.objects.create(name='User 1')
cls.user2 = SystemUser.objects.create(name='User 2')
cls.user1.permissions.add(perm1, perm2)
cls.user2.permissions.add(perm1, perm2, perm3)
# Register Admin classes
class UserAdmin(admin.ModelAdmin):
ordering = ['-permissions__count']
def get_queryset(self, request):
qs = super().get_queryset(request)
return qs.annotate(permissions__count=models.Count("permissions"))
class ReportAdmin(admin.ModelAdmin):
pass
admin.site.register(SystemUser, UserAdmin)
admin.site.register(ReportData, ReportAdmin)
def test_system_user_ordering(self):
# Test if the ordering for SystemUser Admin is as expected
fk_field = admin.site._registry[ReportData].formfield_for_foreignkey(
ReportData.owner.field, request=None
)
expected_order = [self.user2, self.user1] # Expected ordering by permissions count
self.assertEqual(list(fk_field.queryset), expected_order)