Saltar al contenido

administrador de django, administración extendida con vistas personalizadas

Nuestro grupo especializado pasados algunos días de investigación y recopilación de de datos, encontramos la solución, queremos que resulte de utilidad para tu proyecto.

Solución:

Esta guía parece bastante antigua. Preferiría aconsejarle que siga los documentos de Django.

someapp/admin.py

from django.contrib.admin import AdminSite
from django.http import HttpResponse

class MyAdminSite(AdminSite):

     def get_urls(self):
         from django.urls import path
         urls = super().get_urls()
         urls += [
             path('my_view/', self.admin_view(self.my_view))
         ]
         return urls

     def my_view(self, request):
         return HttpResponse("Hello!")

admin_site = MyAdminSite()

Fuente: https://github.com/django/django/blob/2.2/django/contrib/admin/sites.py#L194-L205

También debe actualizar su project/urls.py y reemplazar path('admin/', admin.site.urls) por path('admin/', admin_site.urls). no te olvides de from someapp.admin import admin_site antes de.

La guía que vinculó es antigua y me sorprendió no encontrar nada que respondiera directamente a su pregunta en el último año más o menos.

  1. Cree un nuevo sitio de administración en su aplicación administrador.py o en un lugar conveniente.
  2. Crear una función en el nuevo AdminSitio que aumenta la get_urls() funciona con tus URL adicionales.
  3. Asegúrate de que tu proyecto urls.py enlaces a los recién creados AdminSitio.

Lo siguiente funciona con Python 3.5.1 y Django 1.9.6.


mi_aplicación/admin.py

from django.contrib import admin
from django.contrib.admin import AdminSite
from django.http import HttpResponse

from my_app.models import SomeModel


class MyAdminSite(AdminSite):

    def custom_view(self, request):
        return HttpResponse("Test")

    def get_urls(self):
        from django.conf.urls import url
        urls = super(MyAdminSite, self).get_urls()
        urls += [
            url(r'^custom_view/$', self.admin_view(self.custom_view))
        ]
        return urls

admin_site = MyAdminSite()


@admin.register(SomeModel, site=admin_site)
class SomeModelAdmin(admin.ModelAdmin):
    pass

mi_proyecto/urls.py

from django.conf.urls import url, include

from my_app.admin import admin_site

urlpatterns = [
    url(r'^admin/', admin_site.urls),
    ...
]

valoraciones y reseñas

Tienes la opción de añadir valor a nuestro contenido informacional dando tu veteranía en las referencias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *