diff --git a/djadmin2/core.py b/djadmin2/core.py index 040f336..d0dba8b 100644 --- a/djadmin2/core.py +++ b/djadmin2/core.py @@ -10,10 +10,14 @@ from . import views class Admin2(object): index_view = views.IndexView - def __init__(self): + def __init__(self, name='admin2', app_name='admin2'): self.registry = {} + self.name = name + self.app_name = app_name - def register(self, model, modeladmin=models.ModelAdmin2, **kwargs): + def register(self, model, modeladmin=None, **kwargs): + if not modeladmin: + modeladmin = models.ModelAdmin2 self.registry[model] = modeladmin(model, **kwargs) def deregister(self, model): @@ -34,14 +38,18 @@ class Admin2(object): url(r'^$', self.index_view.as_view(), name='index'), ) for model, modeladmin in self.registry.iteritems(): + app_label = model._meta.app_label + model_name = model._meta.object_name.lower() + + app_name = '{}:{}:{}'.format(self.app_name, app_label, model_name) + namespace = '{}:{}:{}'.format(self.name, app_label, model_name) + urlpatterns += patterns('', - url('^{}/{}/'.format(model._meta.app_label, model._meta.object_name.lower()), + url('^{}/{}/'.format(app_label, model_name), include(modeladmin.urls)), ) return urlpatterns @property def urls(self): - # We set the application and instance namespace here - return self.get_urls(), None, None - \ No newline at end of file + return self.get_urls(), self.app_name, self.name diff --git a/djadmin2/models.py b/djadmin2/models.py index 93fef1b..71b9040 100644 --- a/djadmin2/models.py +++ b/djadmin2/models.py @@ -35,7 +35,7 @@ class BaseAdmin2(object): fields = None exclude = None fieldsets = None - form = forms.ModelForm + form_class = None filter_vertical = () filter_horizontal = () radio_fields = {} @@ -76,6 +76,10 @@ class ModelAdmin2(BaseAdmin2): save_as = False save_on_top = False + create_form_class = None + update_form_class = None + + # Views index_view = views.ModelListView create_view = views.ModelAddFormView @@ -86,31 +90,60 @@ class ModelAdmin2(BaseAdmin2): def __init__(self, model, **kwargs): self.model = model + def get_default_view_kwargs(self): + return { + 'model': self.model, + 'modeladmin': self, + } + + def get_index_kwargs(self): + return self.get_default_view_kwargs() + + def get_create_kwargs(self): + kwargs = self.get_default_view_kwargs() + kwargs.update({ + 'form_class': self.create_form_class if self.create_form_class else self.form_class, + }) + return kwargs + + def get_update_kwargs(self): + kwargs = self.get_default_view_kwargs() + kwargs.update({ + 'form_class': self.update_form_class if self.update_form_class else self.form_class, + }) + return kwargs + + def get_detail_kwargs(self): + return self.get_default_view_kwargs() + + def get_delete_kwargs(self): + return self.get_default_view_kwargs() + def get_urls(self): return patterns('', url( regex=r'^$', - view=self.index_view.as_view(model=self.model), + view=self.index_view.as_view(**self.get_index_kwargs()), name='index' ), url( regex=r'^create/$', - view=self.create_view.as_view(model=self.model), + view=self.create_view.as_view(**self.get_create_kwargs()), name='create' ), url( regex=r'^(?P[0-9]+)/$', - view=self.detail_view.as_view(model=self.model), + view=self.detail_view.as_view(**self.get_detail_kwargs()), name='detail' ), url( regex=r'^(?P[0-9]+)/update/$', - view=self.update_view.as_view(model=self.model), + view=self.update_view.as_view(**self.get_update_kwargs()), name='update' ), url( regex=r'^(?P[0-9]+)/delete/$', - view=self.delete_view.as_view(model=self.model), + view=self.delete_view.as_view(**self.get_delete_kwargs()), name='delete' ), ) diff --git a/example/blog/admin2.py b/example/blog/admin2.py index 9cb5260..2c5c38f 100644 --- a/example/blog/admin2.py +++ b/example/blog/admin2.py @@ -1,11 +1,20 @@ # Import your custom models from .models import Post, Comment +from django.contrib.auth.forms import UserCreationForm, UserChangeForm from django.contrib.auth.models import User + import djadmin2 +from djadmin2.models import ModelAdmin2 + + +class UserAdmin2(ModelAdmin2): + create_form_class = UserCreationForm + update_form_class = UserChangeForm + # Register each model with the admin djadmin2.default.register(Post) djadmin2.default.register(Comment) -djadmin2.default.register(User) \ No newline at end of file +djadmin2.default.register(User, UserAdmin2) \ No newline at end of file diff --git a/example/blog/models.py b/example/blog/models.py index e097a4c..cc845d8 100644 --- a/example/blog/models.py +++ b/example/blog/models.py @@ -1,5 +1,6 @@ from django.db import models + class Post(models.Model): title = models.CharField(max_length=255) body = models.TextField() @@ -7,6 +8,7 @@ class Post(models.Model): def __unicode__(self): return self.title + class Comment(models.Model): post = models.ForeignKey(Post) body = models.TextField()