mirror of
				https://github.com/netbox-community/netbox.git
				synced 2024-05-10 07:54:54 +00:00 
			
		
		
		
	Fixes #2362: Implemented custom admin site to properly handle BASE_PATH
This commit is contained in:
		@@ -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
									
								
								netbox/netbox/admin.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								netbox/netbox/admin.py
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
			
		||||
@@ -272,7 +272,6 @@ RQ_QUEUES = {
 | 
			
		||||
        'DEFAULT_TIMEOUT': REDIS_DEFAULT_TIMEOUT,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
RQ_SHOW_ADMIN_LINK = True
 | 
			
		||||
 | 
			
		||||
# drf_yasg settings for Swagger
 | 
			
		||||
SWAGGER_SETTINGS = {
 | 
			
		||||
 
 | 
			
		||||
@@ -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 += [
 | 
			
		||||
 
 | 
			
		||||
@@ -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']
 | 
			
		||||
 
 | 
			
		||||
@@ -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']
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user