在django admin上创建新的自定义视图

时间:2018-03-08 14:58:06

标签: python django

抱歉,我还是django的新人。我想在管理站点上制作与我的模型无关的自定义视图。我已阅读文档(https://docs.djangoproject.com/en/2.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_urls),但无效。阅读一些教程也不行...... 这是我试过的:

admin.py

from django.contrib import admin
from django.urls import path
from .models import Question
from django.http import HttpResponse

class CustomAdminView(admin.ModelAdmin):
    def get_urls(self):
        urls = super().get_urls()
        my_urls = [
            path(r'^my_view/$', self.admin_site.admin_view(self.my_view))
        ]
        urls = my_urls + urls
        return urls


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


admin.site.register(Question)

urls.py

from django.contrib import admin
from django.urls import path
from django.conf.urls import include, url

admin.autodiscover()
urlpatterns = [
    path(r'polls/',include('polls.urls')),
    path('admin/', admin.site.urls),
]

当我转到admin / my_view时,结果是找不到404。

我也试过扩展AdminView。

admin.py

from django.contrib.admin import AdminSite
from django.urls import path
from .models import Question
from django.http import HttpResponse

class CustomAdminView(AdminSite):
    def get_urls(self):
        urls = super().get_urls()
        my_urls = [
            path(r'my_view/', self.admin_view(self.my_view))
        ]
        urls = my_urls + urls
        return urls


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


custom_admin = CustomAdminView()
custom_admin.register(Question)

urls.py

from django.contrib import admin
from django.urls import path
from django.conf.urls import include, url
from polls.admin import custom_admin

admin.autodiscover()
urlpatterns = [
    path(r'polls/',include('polls.urls')),
    path('admin/', custom_admin.urls),
]

我在admin / my_view上没有收到404错误。但是,不显示默认模型(用户和其他)。只有我的问题'在那里模特。前一个仍然具有默认模型。

如何以正确的方式制作自定义管理视图? 感谢。

1 个答案:

答案 0 :(得分:1)

它解决了。我正在使用我的第二个admin.py和urls.py片段,并根据以下答案注册django的默认模型:Django (1.10) override AdminSite

admin.py

from django.contrib.admin import AdminSite
from django.http import HttpResponse
from django.urls import path
from .models import Question
from django.contrib.auth.models import Group, User #add these moduls
from django.contrib.auth.admin import GroupAdmin, UserAdmin #and these

class CustomAdminView(AdminSite):
    def get_urls(self):
        urls = super().get_urls()
        my_urls = [
            path(r'my_view/', self.admin_view(self.my_view))
        ]
        urls = my_urls + urls
        return urls


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


custom_admin = CustomAdminView()
custom_admin.register(Question)

#register the default model

custom_admin.register(Group, GroupAdmin)
custom_admin.register(User, UserAdmin)