inlines.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from django.contrib import admin
  2. from django.contrib.auth.models import Group, User
  3. from users.models import UserConfig
  4. __all__ = (
  5. 'GroupObjectPermissionInline',
  6. 'UserConfigInline',
  7. 'UserObjectPermissionInline',
  8. )
  9. class ObjectPermissionInline(admin.TabularInline):
  10. exclude = None
  11. extra = 3
  12. readonly_fields = ['object_types', 'actions', 'constraints']
  13. verbose_name = 'Permission'
  14. verbose_name_plural = 'Permissions'
  15. def get_queryset(self, request):
  16. return super().get_queryset(request).prefetch_related('objectpermission__object_types')
  17. @staticmethod
  18. def object_types(instance):
  19. # Don't call .values_list() here because we want to reference the pre-fetched object_types
  20. return ', '.join([ot.name for ot in instance.objectpermission.object_types.all()])
  21. @staticmethod
  22. def actions(instance):
  23. return ', '.join(instance.objectpermission.actions)
  24. @staticmethod
  25. def constraints(instance):
  26. return instance.objectpermission.constraints
  27. class GroupObjectPermissionInline(ObjectPermissionInline):
  28. model = Group.object_permissions.through
  29. class UserObjectPermissionInline(ObjectPermissionInline):
  30. model = User.object_permissions.through
  31. class UserConfigInline(admin.TabularInline):
  32. model = UserConfig
  33. readonly_fields = ('data',)
  34. can_delete = False
  35. verbose_name = 'Preferences'