Django: using two different AdminSite instances with different registered models

In addition to the usual administrator, I want to create a limited admin for non-employee users. This admin site will have different registered ModelAdmins.

I created the / useradmin / folder in my project directory and is similar to contrib / admin / _init_.py. I added autodiscover (), which will register models defined in useradmin.py modules, not admin.py:

# useradmin/__init__.py
def autodiscover():
# Same as admin.autodiscover() but registers useradmin.py modules
...
for app in settings.INSTALLED_APPS:
    mod = import_module(app)
    try:
        before_import_registry = copy.copy(site._registry)
        import_module('%s.useradmin' % app)
    except:
        site._registry = before_import_registry
        if module_has_submodule(mod, 'useradmin'):
            raise

I also created sites.py under useradmin / to override AdminSite, similar to contrib / admin / sites:

# useradmin/sites.py
class UserAdminSite(AdminSite):
    def has_permission(self, request):
        # Don't care if the user is staff
        return request.user.is_active

    def login(self, request):
        # Do the login stuff but don't care if the user is staff
        if request.user.is_authenticated():
            ...
        else:
            ...

site = UserAdminSite(name='useradmin')

In the project urls:

# urls.py
from django.contrib import admin
import useradmin

admin.autodiscover()
useradmin.autodiscover()

urlpatterns = patterns('',
    (r'^admin/', include(admin.site.urls)),
    (r'^useradmin/', include(useradmin.site.urls)),
)

And I am trying to register different models in admin.py and useradmin.py modules in application directories:

# products/useradmin.py
import useradmin
class ProductAdmin(useradmin.ModelAdmin):
    pass
useradmin.site.register(Product, ProductAdmin)

useradmin.py, useradmin.site.register(Product, ProductAdmin), 'module' object has no attribute 'ModelAdmin'. , ,

import useradmin
from useradmin import ModelAdmin

.

, ?

Edit:

@Luke : ( )

# admin.py
from django.contrib.admin import autodiscover
from django.contrib.admin.sites import AdminSite
user_site = AdminSite(name='useradmin')

# urls.py (does not even have url patterns; just calls autodiscover())
import admin
admin.autodiscover()

# products/admin.py
import admin
from products.models import Product
admin.user_site.register(Product)

AttributeError: 'module' object has no attribute 'user_site', admin.user_site.register(Product) products/admin.py.

?

:

, , admin.py useradmin.py , .

+3
1

useradmin ModelAdmin, contrib.admin? , , .

, : AdminSites, URL- ( urlconf).

0

Source: https://habr.com/ru/post/1781996/


All Articles