1. """
    
  2. A second, custom AdminSite -- see tests.CustomAdminSiteTests.
    
  3. """
    
  4. from django.contrib import admin
    
  5. from django.contrib.auth.admin import UserAdmin
    
  6. from django.contrib.auth.models import User
    
  7. from django.http import HttpResponse
    
  8. from django.urls import path
    
  9. 
    
  10. from . import admin as base_admin
    
  11. from . import forms, models
    
  12. 
    
  13. 
    
  14. class Admin2(admin.AdminSite):
    
  15.     app_index_template = "custom_admin/app_index.html"
    
  16.     login_form = forms.CustomAdminAuthenticationForm
    
  17.     login_template = "custom_admin/login.html"
    
  18.     logout_template = "custom_admin/logout.html"
    
  19.     index_template = ["custom_admin/index.html"]  # a list, to test fix for #18697
    
  20.     password_change_template = "custom_admin/password_change_form.html"
    
  21.     password_change_done_template = "custom_admin/password_change_done.html"
    
  22. 
    
  23.     # A custom index view.
    
  24.     def index(self, request, extra_context=None):
    
  25.         return super().index(request, {"foo": "*bar*"})
    
  26. 
    
  27.     def get_urls(self):
    
  28.         return [
    
  29.             path("my_view/", self.admin_view(self.my_view), name="my_view"),
    
  30.         ] + super().get_urls()
    
  31. 
    
  32.     def my_view(self, request):
    
  33.         return HttpResponse("Django is a magical pony!")
    
  34. 
    
  35.     def password_change(self, request, extra_context=None):
    
  36.         return super().password_change(request, {"spam": "eggs"})
    
  37. 
    
  38.     def get_app_list(self, request, app_label=None):
    
  39.         app_list = super().get_app_list(request, app_label=app_label)
    
  40.         # Reverse order of apps and models.
    
  41.         app_list = list(reversed(app_list))
    
  42.         for app in app_list:
    
  43.             app["models"].sort(key=lambda x: x["name"], reverse=True)
    
  44.         return app_list
    
  45. 
    
  46. 
    
  47. class UserLimitedAdmin(UserAdmin):
    
  48.     # used for testing password change on a user not in queryset
    
  49.     def get_queryset(self, request):
    
  50.         qs = super().get_queryset(request)
    
  51.         return qs.filter(is_superuser=False)
    
  52. 
    
  53. 
    
  54. class CustomPwdTemplateUserAdmin(UserAdmin):
    
  55.     change_user_password_template = [
    
  56.         "admin/auth/user/change_password.html"
    
  57.     ]  # a list, to test fix for #18697
    
  58. 
    
  59. 
    
  60. class BookAdmin(admin.ModelAdmin):
    
  61.     def get_deleted_objects(self, objs, request):
    
  62.         return ["a deletable object"], {"books": 1}, set(), []
    
  63. 
    
  64. 
    
  65. site = Admin2(name="admin2")
    
  66. 
    
  67. site.register(models.Article, base_admin.ArticleAdmin)
    
  68. site.register(models.Book, BookAdmin)
    
  69. site.register(
    
  70.     models.Section, inlines=[base_admin.ArticleInline], search_fields=["name"]
    
  71. )
    
  72. site.register(models.Thing, base_admin.ThingAdmin)
    
  73. site.register(models.Fabric, base_admin.FabricAdmin)
    
  74. site.register(models.ChapterXtra1, base_admin.ChapterXtra1Admin)
    
  75. site.register(User, UserLimitedAdmin)
    
  76. site.register(models.UndeletableObject, base_admin.UndeletableObjectAdmin)
    
  77. site.register(models.Simple, base_admin.AttributeErrorRaisingAdmin)
    
  78. 
    
  79. simple_site = Admin2(name="admin4")
    
  80. simple_site.register(User, CustomPwdTemplateUserAdmin)