mirror of
https://github.com/jazzband/django-admin2.git
synced 2026-04-20 23:01:06 +00:00
Merge pull request #57 from AndrewIngram/custom-form-classes
Custom form classes
This commit is contained in:
commit
80512305e4
6 changed files with 86 additions and 23 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):
|
||||
|
|
@ -29,19 +33,25 @@ class Admin2(object):
|
|||
continue
|
||||
raise e
|
||||
|
||||
def get_index_kwargs(self):
|
||||
return {
|
||||
'registry': self.registry,
|
||||
}
|
||||
|
||||
def get_urls(self):
|
||||
urlpatterns = patterns('',
|
||||
url(r'^$', self.index_view.as_view(), name='index'),
|
||||
url(r'^$', self.index_view.as_view(**self.get_index_kwargs()), name='index'),
|
||||
)
|
||||
for model, modeladmin in self.registry.iteritems():
|
||||
app_label = model._meta.app_label
|
||||
model_name = model._meta.object_name.lower()
|
||||
|
||||
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 = {}
|
||||
|
|
@ -75,6 +75,11 @@ class ModelAdmin2(BaseAdmin2):
|
|||
search_fields = ()
|
||||
save_as = False
|
||||
save_on_top = False
|
||||
verbose_name = None
|
||||
verbose_name_plural = None
|
||||
|
||||
create_form_class = None
|
||||
update_form_class = None
|
||||
|
||||
# Views
|
||||
index_view = views.ModelListView
|
||||
|
|
@ -86,31 +91,65 @@ class ModelAdmin2(BaseAdmin2):
|
|||
def __init__(self, model, **kwargs):
|
||||
self.model = model
|
||||
|
||||
if self.verbose_name is None:
|
||||
self.verbose_name = self.model._meta.verbose_name
|
||||
if self.verbose_name_plural is None:
|
||||
self.verbose_name_plural = self.model._meta.verbose_name_plural
|
||||
|
||||
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'
|
||||
),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -2,11 +2,9 @@
|
|||
|
||||
{% block content %}
|
||||
<h1>Index</h1>
|
||||
|
||||
{{ object_list }}
|
||||
<table>
|
||||
{% for obj in object_list %}
|
||||
<tr><td>{{ obj.app_name }}</td></tr>
|
||||
{% for modeladmin in registry.values %}
|
||||
<tr><td>{{ modeladmin.verbose_name_plural }}</td></tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endblock content %}
|
||||
|
|
|
|||
|
|
@ -7,11 +7,12 @@ from django.db import models
|
|||
|
||||
from braces.views import LoginRequiredMixin, StaffuserRequiredMixin
|
||||
|
||||
from .utils import get_admin2s
|
||||
|
||||
ADMIN2_THEME_DIRECTORY = getattr(settings, "ADMIN2_THEME_DIRECTORY", "admin2/bootstrap")
|
||||
|
||||
class Admin2Mixin(object):
|
||||
modeladmin = None
|
||||
|
||||
def get_template_names(self):
|
||||
return [os.path.join(ADMIN2_THEME_DIRECTORY, self.default_template_name)]
|
||||
|
||||
|
|
@ -27,12 +28,16 @@ class Admin2Mixin(object):
|
|||
return modelform_factory(self.get_model())
|
||||
|
||||
|
||||
class IndexView(Admin2Mixin, generic.ListView):
|
||||
class IndexView(Admin2Mixin, generic.TemplateView):
|
||||
default_template_name = "index.html"
|
||||
registry = None
|
||||
|
||||
def get_queryset(self):
|
||||
return get_admin2s()
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
data = super(IndexView, self).get_context_data(**kwargs)
|
||||
data.update({
|
||||
'registry': self.registry
|
||||
})
|
||||
return data
|
||||
|
||||
class ModelListView(Admin2Mixin, generic.ListView):
|
||||
default_template_name = "model_list.html"
|
||||
|
|
|
|||
|
|
@ -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