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:
def autodiscover():
...
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:
class UserAdminSite(AdminSite):
def has_permission(self, request):
return request.user.is_active
def login(self, request):
if request.user.is_authenticated():
...
else:
...
site = UserAdminSite(name='useradmin')
In the project urls:
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:
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 :
( )
from django.contrib.admin import autodiscover
from django.contrib.admin.sites import AdminSite
user_site = AdminSite(name='useradmin')
import admin
admin.autodiscover()
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 , .