Просмотр исходного кода

Fixes #2362: Implemented custom admin site to properly handle BASE_PATH

Jeremy Stretch 7 лет назад
Родитель
Сommit
ff65f7fd7b

+ 8 - 11
netbox/extras/admin.py

@@ -4,12 +4,9 @@ from django import forms
 from django.contrib import admin
 from django.utils.safestring import mark_safe
 
+from netbox.admin import admin_site
 from utilities.forms import LaxURLField
-from .constants import OBJECTCHANGE_ACTION_CREATE, OBJECTCHANGE_ACTION_DELETE, OBJECTCHANGE_ACTION_UPDATE
-from .models import (
-    ConfigContext, CustomField, CustomFieldChoice, Graph, ExportTemplate, ObjectChange, TopologyMap, UserAction,
-    Webhook,
-)
+from .models import CustomField, CustomFieldChoice, Graph, ExportTemplate, TopologyMap, UserAction, Webhook
 
 
 def order_content_types(field):
@@ -39,7 +36,7 @@ class WebhookForm(forms.ModelForm):
         order_content_types(self.fields['obj_type'])
 
 
-@admin.register(Webhook)
+@admin.register(Webhook, site=admin_site)
 class WebhookAdmin(admin.ModelAdmin):
     list_display = [
         'name', 'models', 'payload_url', 'http_content_type', 'enabled', 'type_create', 'type_update',
@@ -72,7 +69,7 @@ class CustomFieldChoiceAdmin(admin.TabularInline):
     extra = 5
 
 
-@admin.register(CustomField)
+@admin.register(CustomField, site=admin_site)
 class CustomFieldAdmin(admin.ModelAdmin):
     inlines = [CustomFieldChoiceAdmin]
     list_display = ['name', 'models', 'type', 'required', 'filter_logic', 'default', 'weight', 'description']
@@ -86,7 +83,7 @@ class CustomFieldAdmin(admin.ModelAdmin):
 # Graphs
 #
 
-@admin.register(Graph)
+@admin.register(Graph, site=admin_site)
 class GraphAdmin(admin.ModelAdmin):
     list_display = ['name', 'type', 'weight', 'source']
 
@@ -109,7 +106,7 @@ class ExportTemplateForm(forms.ModelForm):
         self.fields['content_type'].choices.insert(0, ('', '---------'))
 
 
-@admin.register(ExportTemplate)
+@admin.register(ExportTemplate, site=admin_site)
 class ExportTemplateAdmin(admin.ModelAdmin):
     list_display = ['name', 'content_type', 'description', 'mime_type', 'file_extension']
     form = ExportTemplateForm
@@ -119,7 +116,7 @@ class ExportTemplateAdmin(admin.ModelAdmin):
 # Topology maps
 #
 
-@admin.register(TopologyMap)
+@admin.register(TopologyMap, site=admin_site)
 class TopologyMapAdmin(admin.ModelAdmin):
     list_display = ['name', 'slug', 'site']
     prepopulated_fields = {
@@ -131,7 +128,7 @@ class TopologyMapAdmin(admin.ModelAdmin):
 # User actions
 #
 
-@admin.register(UserAction)
+@admin.register(UserAction, site=admin_site)
 class UserActionAdmin(admin.ModelAdmin):
     actions = None
     list_display = ['user', 'action', 'content_type', 'object_id', '_message']

+ 30 - 0
netbox/netbox/admin.py

@@ -0,0 +1,30 @@
+from django.conf import settings
+from django.contrib.admin import AdminSite
+from django.contrib.auth.models import Group, User
+from django.contrib.auth.admin import GroupAdmin, UserAdmin
+from taggit.admin import TagAdmin
+from taggit.models import Tag
+
+
+class NetBoxAdminSite(AdminSite):
+    """
+    Custom admin site
+    """
+    site_header = 'NetBox Administration'
+    site_title = 'NetBox'
+    site_url = '/{}'.format(settings.BASE_PATH)
+
+
+admin_site = NetBoxAdminSite(name='admin')
+
+# Register external models
+admin_site.register(Group, GroupAdmin)
+admin_site.register(User, UserAdmin)
+admin_site.register(Tag, TagAdmin)
+
+# Modify the template to include an RQ link if django_rq is installed (see RQ_SHOW_ADMIN_LINK)
+try:
+    import django_rq
+    admin_site.index_template = 'django_rq/index.html'
+except ImportError:
+    pass

+ 0 - 1
netbox/netbox/settings.py

@@ -272,7 +272,6 @@ RQ_QUEUES = {
         'DEFAULT_TIMEOUT': REDIS_DEFAULT_TIMEOUT,
     }
 }
-RQ_SHOW_ADMIN_LINK = True
 
 # drf_yasg settings for Swagger
 SWAGGER_SETTINGS = {

+ 2 - 3
netbox/netbox/urls.py

@@ -2,13 +2,13 @@ from __future__ import unicode_literals
 
 from django.conf import settings
 from django.conf.urls import include, url
-from django.contrib import admin
 from django.views.static import serve
 from drf_yasg.views import get_schema_view
 from drf_yasg import openapi
 
 from netbox.views import APIRootView, HomeView, SearchView
 from users.views import LoginView, LogoutView
+from .admin import admin_site
 
 schema_view = get_schema_view(
     openapi.Info(
@@ -60,7 +60,7 @@ _patterns = [
     url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}),
 
     # Admin
-    url(r'^admin/', admin.site.urls),
+    url(r'^admin/', admin_site.urls),
 
 ]
 
@@ -69,7 +69,6 @@ if settings.WEBHOOKS_ENABLED:
         url(r'^admin/webhook-backend-status/', include('django_rq.urls')),
     ]
 
-
 if settings.DEBUG:
     import debug_toolbar
     _patterns += [

+ 2 - 1
netbox/secrets/admin.py

@@ -3,11 +3,12 @@ from __future__ import unicode_literals
 from django.contrib import admin, messages
 from django.shortcuts import redirect, render
 
+from netbox.admin import admin_site
 from .forms import ActivateUserKeyForm
 from .models import UserKey
 
 
-@admin.register(UserKey)
+@admin.register(UserKey, site=admin_site)
 class UserKeyAdmin(admin.ModelAdmin):
     actions = ['activate_selected']
     list_display = ['user', 'is_filled', 'is_active', 'created']

+ 2 - 1
netbox/users/admin.py

@@ -3,6 +3,7 @@ from __future__ import unicode_literals
 from django import forms
 from django.contrib import admin
 
+from netbox.admin import admin_site
 from .models import Token
 
 
@@ -14,7 +15,7 @@ class TokenAdminForm(forms.ModelForm):
         model = Token
 
 
-@admin.register(Token)
+@admin.register(Token, site=admin_site)
 class TokenAdmin(admin.ModelAdmin):
     form = TokenAdminForm
     list_display = ['key', 'user', 'created', 'expires', 'write_enabled', 'description']