Add missing filters for reverse many-to-many relationships

This commit is contained in:
Jeremy Stretch
2024-03-07 16:27:58 -05:00
parent a547155241
commit 69f370fddc
12 changed files with 373 additions and 30 deletions

View File

@@ -20,6 +20,16 @@ class GroupFilterSet(BaseFilterSet):
method='search',
label=_('Search'),
)
user_id = django_filters.ModelMultipleChoiceFilter(
field_name='user',
queryset=get_user_model().objects.all(),
label=_('User (ID)'),
)
permission_id = django_filters.ModelMultipleChoiceFilter(
field_name='object_permissions',
queryset=ObjectPermission.objects.all(),
label=_('Permission (ID)'),
)
class Meta:
model = Group
@@ -47,6 +57,11 @@ class UserFilterSet(BaseFilterSet):
to_field_name='name',
label=_('Group (name)'),
)
permission_id = django_filters.ModelMultipleChoiceFilter(
field_name='object_permissions',
queryset=ObjectPermission.objects.all(),
label=_('Permission (ID)'),
)
class Meta:
model = get_user_model()

View File

@@ -67,6 +67,16 @@ class UserTestCase(TestCase, BaseFilterSetTests):
users[1].groups.set([groups[1]])
users[2].groups.set([groups[2]])
object_permissions = (
ObjectPermission(name='Permission 1', actions=['add']),
ObjectPermission(name='Permission 2', actions=['change']),
ObjectPermission(name='Permission 3', actions=['delete']),
)
ObjectPermission.objects.bulk_create(object_permissions)
object_permissions[0].users.add(users[0])
object_permissions[1].users.add(users[1])
object_permissions[2].users.add(users[2])
def test_q(self):
params = {'q': 'user1'}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
@@ -106,6 +116,11 @@ class UserTestCase(TestCase, BaseFilterSetTests):
params = {'group': [groups[0].name, groups[1].name]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_permission(self):
object_permissions = ObjectPermission.objects.all()[:2]
params = {'permission_id': [object_permissions[0].pk, object_permissions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
class GroupTestCase(TestCase, BaseFilterSetTests):
queryset = Group.objects.all()
@@ -122,6 +137,26 @@ class GroupTestCase(TestCase, BaseFilterSetTests):
)
Group.objects.bulk_create(groups)
users = (
User(username='User 1'),
User(username='User 2'),
User(username='User 3'),
)
User.objects.bulk_create(users)
users[0].groups.set([groups[0]])
users[1].groups.set([groups[1]])
users[2].groups.set([groups[2]])
object_permissions = (
ObjectPermission(name='Permission 1', actions=['add']),
ObjectPermission(name='Permission 2', actions=['change']),
ObjectPermission(name='Permission 3', actions=['delete']),
)
ObjectPermission.objects.bulk_create(object_permissions)
object_permissions[0].groups.add(groups[0])
object_permissions[1].groups.add(groups[1])
object_permissions[2].groups.add(groups[2])
def test_q(self):
params = {'q': 'group 1'}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
@@ -130,6 +165,16 @@ class GroupTestCase(TestCase, BaseFilterSetTests):
params = {'name': ['Group 1', 'Group 2']}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_user(self):
users = User.objects.all()[:2]
params = {'user_id': [users[0].pk, users[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_permission(self):
object_permissions = ObjectPermission.objects.all()[:2]
params = {'permission_id': [object_permissions[0].pk, object_permissions[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
class ObjectPermissionTestCase(TestCase, BaseFilterSetTests):
queryset = ObjectPermission.objects.all()