【问题标题】:Make new custom view at django admin在 django admin 中创建新的自定义视图
【发布时间】:2018-08-16 23:36:24
【问题描述】:

对不起,我还是 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 not found.

我也尝试扩展 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 错误。但是,不显示默认模型(用户和其他人)。那里只有我的“问题”模型。上一个仍然具有默认模型。

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

【问题讨论】:

  • 您的第一个 sn-p 不起作用,因为您没有在任何地方使用 CustomAdminView。
  • 对不起,但是,我不知道在哪里使用它...当我尝试创建新实例时,出现错误,因为我不知道将什么传递给 init
  • Django 2.1 will have a hook 轻松覆盖默认管理站点。在那之前,它会更棘手。 This answer 可能会对您有所帮助。
  • 谢谢!!我使用第二个 sn-p 并注册 django 的默认模型(用户、模型),它写在那个答案中。
  • *(用户和组)

标签: python django


【解决方案1】:

解决了。我正在使用我的第二个 admin.py 和 urls.py sn-ps 并根据这个答案注册 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)

【讨论】:

    猜你喜欢
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2017-12-23
    • 1970-01-01
    • 2011-10-12
    • 2012-08-19
    • 1970-01-01
    相关资源
    最近更新 更多