admin.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. from django import forms
  2. from django.contrib import admin
  3. from django.contrib.auth.admin import UserAdmin as UserAdmin_
  4. from django.contrib.auth.models import Group as StockGroup, User as StockUser
  5. from extras.admin import order_content_types
  6. from .models import Group, User, ObjectPermission, Token, UserConfig
  7. #
  8. # Users & groups
  9. #
  10. # Unregister the built-in GroupAdmin and UserAdmin classes so that we can use our custom admin classes below
  11. admin.site.unregister(StockGroup)
  12. admin.site.unregister(StockUser)
  13. @admin.register(Group)
  14. class GroupAdmin(admin.ModelAdmin):
  15. fields = ('name',)
  16. list_display = ('name', 'user_count')
  17. ordering = ('name',)
  18. search_fields = ('name',)
  19. def user_count(self, obj):
  20. return obj.user_set.count()
  21. class UserConfigInline(admin.TabularInline):
  22. model = UserConfig
  23. readonly_fields = ('data',)
  24. can_delete = False
  25. verbose_name = 'Preferences'
  26. @admin.register(User)
  27. class UserAdmin(UserAdmin_):
  28. list_display = [
  29. 'username', 'email', 'first_name', 'last_name', 'is_superuser', 'is_staff', 'is_active'
  30. ]
  31. fieldsets = (
  32. (None, {'fields': ('username', 'password')}),
  33. ('Personal info', {'fields': ('first_name', 'last_name', 'email')}),
  34. ('Permissions', {
  35. 'fields': ('is_active', 'is_staff', 'is_superuser'),
  36. }),
  37. ('Important dates', {'fields': ('last_login', 'date_joined')}),
  38. )
  39. inlines = (UserConfigInline,)
  40. #
  41. # REST API tokens
  42. #
  43. class TokenAdminForm(forms.ModelForm):
  44. key = forms.CharField(
  45. required=False,
  46. help_text="If no key is provided, one will be generated automatically."
  47. )
  48. class Meta:
  49. fields = [
  50. 'user', 'key', 'write_enabled', 'expires', 'description'
  51. ]
  52. model = Token
  53. @admin.register(Token)
  54. class TokenAdmin(admin.ModelAdmin):
  55. form = TokenAdminForm
  56. list_display = [
  57. 'key', 'user', 'created', 'expires', 'write_enabled', 'description'
  58. ]
  59. #
  60. # Permissions
  61. #
  62. class ObjectPermissionForm(forms.ModelForm):
  63. class Meta:
  64. model = ObjectPermission
  65. exclude = []
  66. def __init__(self, *args, **kwargs):
  67. super().__init__(*args, **kwargs)
  68. # Format ContentType choices
  69. order_content_types(self.fields['content_types'])
  70. self.fields['content_types'].choices.insert(0, ('', '---------'))
  71. @admin.register(ObjectPermission)
  72. class ObjectPermissionAdmin(admin.ModelAdmin):
  73. form = ObjectPermissionForm
  74. list_display = [
  75. 'model', 'can_view', 'can_add', 'can_change', 'can_delete'
  76. ]