Django - зарегистрировать модель приложения на пользовательском сайте администратора - PullRequest
0 голосов
/ 05 мая 2018

У меня есть проект django с тремя приложениями: веб-сайт, блог и обычай. Приложение customauth реализует пользовательский пользователь и AdminSite. В приложении блога есть модель Post. Я пытаюсь зарегистрировать модель Post на пользовательском AdminSite и получаю следующую ошибку:

NoReverseMatch at /my_admin/
Reverse for 'app_list' with keyword arguments '{'app_label': 'blog'}' not found. 1 pattern(s) tried: ['admin\\/(?P<app_label>customauth)/$']
Request Method: GET
Request URL:    http://127.0.0.1:8000/my_admin/
Django Version: 2.0.4
Exception Type: NoReverseMatch
Exception Value:    
Reverse for 'app_list' with keyword arguments '{'app_label': 'blog'}' not found. 1 pattern(s) tried: ['admin\\/(?P<app_label>customauth)/$']

Вот обычный / admin.py:

class MyAdminSite(admin.AdminSite):
    site_title = "Custom Administration Area"
    site_header = 'Custom Administration Area'

    def get_urls(self):
        urls = super(MyAdminSite, self).get_urls()
        my_urls = [
            url(r'^my_view/$', self.my_view, name='my_view'),
        ]
        return my_urls + urls

    def my_view(self,request):
        value = "You're looking at the new admin view."
        context = dict(
           # Include common variables for rendering the admin template.
           self.each_context(request),
           # Anything else you want in the context...
           key=value,
        )
        return TemplateResponse(request, "website/admin.html", context)

admin_site = MyAdminSite(name='myadmin')
# Now register the new UserAdmin...
admin_site.register(MyUser, UserAdmin)

А вот и блог / admin.py:

from django.contrib import admin    
from customauth.admin import admin_site
# Register your models here.
from .models import Post

class PostAdmin(admin.ModelAdmin):
    pass

admin_site.register(Post,PostAdmin)

Вот сайт / urls.py:

from django.contrib import admin
from django.urls import include, path
from customauth.admin import admin_site

from . import views

urlpatterns = [
    path('admin/',       admin.site.urls,            name='admin'),
    path('my_admin/',    include('customauth.urls'), name='custom_admin'),
    path('',             views.index,                name='index'),
    path('latest_news/', include('blog.urls'),       name='latest_news')
]

А вот и привычный / urls.py:

from . import views
from .admin import admin_site

urlpatterns = [
    path('', admin_site.my_view, name='custom_admin'),
]

Что я делаю не так?

1 Ответ

0 голосов
/ 05 мая 2018

Я понял, что я сделал не так.

Проблема в том, как я настроил URL.

В website.urls я изменил:

path('my_admin/',    include('customauth.urls'), name='custom_admin'),

до

path('my_admin/',    admin_site.urls,      name='custom_admin'),

И это решило проблему. Мне больше не нужен файл customauth.urls.

...