mirror of
https://github.com/jazzband/django-admin2.git
synced 2026-03-24 10:00:25 +00:00
custom form class support
Also sets framework for adding kwargs to any admin2 view
This commit is contained in:
parent
8f64972fd5
commit
24bfdab8a6
4 changed files with 65 additions and 13 deletions
|
|
@ -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
|
||||
|
||||
return self.get_urls(), self.app_name, self.name
|
||||
|
|
|
|||
|
|
@ -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<pk>[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<pk>[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<pk>[0-9]+)/delete/$',
|
||||
view=self.delete_view.as_view(model=self.model),
|
||||
view=self.delete_view.as_view(**self.get_delete_kwargs()),
|
||||
name='delete'
|
||||
),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
djadmin2.default.register(User, UserAdmin2)
|
||||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Reference in a new issue