mirror of
https://github.com/jazzband/django-admin2.git
synced 2026-03-17 06:30:25 +00:00
merge in from @AndrewIngram for #58
This commit is contained in:
parent
6c1a0646fc
commit
e963553361
8 changed files with 71 additions and 21 deletions
|
|
@ -11,10 +11,9 @@ from . import views
|
|||
class Admin2(object):
|
||||
index_view = views.IndexView
|
||||
|
||||
def __init__(self, name='admin2', app_name='admin2'):
|
||||
def __init__(self, name='admin2'):
|
||||
self.registry = {}
|
||||
self.name = name
|
||||
self.app_name = app_name
|
||||
|
||||
def register(self, model, modeladmin=None, **kwargs):
|
||||
if model in self.registry:
|
||||
|
|
@ -60,4 +59,4 @@ class Admin2(object):
|
|||
|
||||
@property
|
||||
def urls(self):
|
||||
return self.get_urls(), self.app_name, self.name
|
||||
return self.get_urls(), self.name, self.name
|
||||
|
|
|
|||
|
|
@ -4,6 +4,9 @@ For wont of a better name, this module is called 'models'. It's role is
|
|||
synonymous with the django.contrib.admin.sites model.
|
||||
|
||||
"""
|
||||
import functools
|
||||
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.conf.urls import patterns, include, url
|
||||
from django.contrib.auth import models as auth_app
|
||||
from django.db.models import get_models, signals
|
||||
|
|
@ -110,6 +113,8 @@ class ModelAdmin2(BaseAdmin2):
|
|||
|
||||
def __init__(self, model, **kwargs):
|
||||
self.model = model
|
||||
self.app_label = model._meta.app_label
|
||||
self.model_name = model._meta.object_name.lower()
|
||||
|
||||
if self.verbose_name is None:
|
||||
self.verbose_name = self.model._meta.verbose_name
|
||||
|
|
@ -118,10 +123,15 @@ class ModelAdmin2(BaseAdmin2):
|
|||
|
||||
def get_default_view_kwargs(self):
|
||||
return {
|
||||
'app_label': self.app_label,
|
||||
'model': self.model,
|
||||
'model_name': self.model_name,
|
||||
'modeladmin': self,
|
||||
}
|
||||
|
||||
def get_prefixed_view_name(self, view_name):
|
||||
return '{}_{}_{}'.format(self.app_label, self.model_name, view_name)
|
||||
|
||||
def get_index_kwargs(self):
|
||||
return self.get_default_view_kwargs()
|
||||
|
||||
|
|
@ -145,32 +155,35 @@ class ModelAdmin2(BaseAdmin2):
|
|||
def get_delete_kwargs(self):
|
||||
return self.get_default_view_kwargs()
|
||||
|
||||
def get_index_url(self):
|
||||
return reverse('admin2:{}'.format(self.get_prefixed_view_name('index')))
|
||||
|
||||
def get_urls(self):
|
||||
return patterns('',
|
||||
url(
|
||||
regex=r'^$',
|
||||
view=self.index_view.as_view(**self.get_index_kwargs()),
|
||||
name='index'
|
||||
name=self.get_prefixed_view_name('index')
|
||||
),
|
||||
url(
|
||||
regex=r'^create/$',
|
||||
regex=r'^create/$',
|
||||
view=self.create_view.as_view(**self.get_create_kwargs()),
|
||||
name='create'
|
||||
name=self.get_prefixed_view_name('create')
|
||||
),
|
||||
url(
|
||||
regex=r'^(?P<pk>[0-9]+)/$',
|
||||
view=self.detail_view.as_view(**self.get_detail_kwargs()),
|
||||
name='detail'
|
||||
name=self.get_prefixed_view_name('detail')
|
||||
),
|
||||
url(
|
||||
regex=r'^(?P<pk>[0-9]+)/update/$',
|
||||
view=self.update_view.as_view(**self.get_update_kwargs()),
|
||||
name='update'
|
||||
name=self.get_prefixed_view_name('update')
|
||||
),
|
||||
url(
|
||||
regex=r'^(?P<pk>[0-9]+)/delete/$',
|
||||
view=self.delete_view.as_view(**self.get_delete_kwargs()),
|
||||
name='delete'
|
||||
name=self.get_prefixed_view_name('delete')
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@
|
|||
<body>
|
||||
<div class="container-fluid">
|
||||
{% block content %}{% endblock %}
|
||||
|
||||
<a href="{% url 'admin2:index' %}">Index</a>
|
||||
</div>
|
||||
|
||||
<script src="http://code.jquery.com/jquery.js"></script>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
<h1>Index</h1>
|
||||
<table>
|
||||
{% for modeladmin in registry.values %}
|
||||
<tr><td><a href="">{{ modeladmin.verbose_name_plural }}</a></td></tr>
|
||||
<tr><td><a href="{{ modeladmin.get_index_url }}">{{ modeladmin.verbose_name_plural }}</a></td></tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endblock content %}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
{% extends "admin2/bootstrap/base.html" %}
|
||||
{% load admin2_urls %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
|
|
@ -6,9 +7,9 @@
|
|||
<h3>Select {{ model }} to change</h3>
|
||||
</div>
|
||||
<div class="span2">
|
||||
{% if has_add_permission %}
|
||||
<a class="btn" href="./create/">Add {{ model|title }} <i class=" icon-plus-sign"></i></a>
|
||||
{% endif %}
|
||||
{# if has_add_permission #}
|
||||
<a href="{% url view|admin2_urlname:'create' %}">add</a>
|
||||
{# endif #}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -25,13 +26,13 @@
|
|||
{% for obj in object_list %}
|
||||
<td><input type="checkbox"></td>
|
||||
<td>
|
||||
{{ obj }} <a href="./{{ obj.pk }}/">detail</a>
|
||||
{% if has_edit_permission %}
|
||||
<a href="./{{ obj.pk }}/update/">edit</a>
|
||||
{% endif %}
|
||||
{% if has_delete_permission %}
|
||||
<a href="./{{ obj.pk }}/delete/">delete</a>
|
||||
{% endif %}
|
||||
{{ obj }} <a href="{% url view|admin2_urlname:'detail' pk=obj.pk %}">detail</a>
|
||||
{# if has_edit_permission #}
|
||||
<a href="{% url view|admin2_urlname:'update' pk=obj.pk %}">edit</a>
|
||||
{# endif #}
|
||||
{# if has_delete_permission #}
|
||||
<a href="{% url view|admin2_urlname:'delete' pk=obj.pk %}">delete</a>
|
||||
{# endif #}
|
||||
</td>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
|
|
|||
0
djadmin2/templatetags/__init__.py
Normal file
0
djadmin2/templatetags/__init__.py
Normal file
8
djadmin2/templatetags/admin2_urls.py
Normal file
8
djadmin2/templatetags/admin2_urls.py
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
from django import template
|
||||
|
||||
register = template.Library()
|
||||
|
||||
|
||||
@register.filter
|
||||
def admin2_urlname(value, arg):
|
||||
return 'admin2:%s_%s_%s' % (value.app_label, value.model_name, arg)
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
import os
|
||||
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.views import redirect_to_login
|
||||
from django.core.exceptions import PermissionDenied
|
||||
|
|
@ -14,9 +15,25 @@ ADMIN2_THEME_DIRECTORY = getattr(settings, "ADMIN2_THEME_DIRECTORY", "admin2/boo
|
|||
|
||||
|
||||
class Admin2Mixin(object):
|
||||
modeladmin = None
|
||||
model_name = None
|
||||
app_label = None
|
||||
|
||||
def get_template_names(self):
|
||||
return [os.path.join(ADMIN2_THEME_DIRECTORY, self.default_template_name)]
|
||||
|
||||
def get_model(self):
|
||||
return self.model
|
||||
|
||||
def get_queryset(self):
|
||||
return self.get_model()._default_manager.all()
|
||||
|
||||
def get_form_class(self):
|
||||
if self.form_class is not None:
|
||||
return self.form_class
|
||||
return modelform_factory(self.get_model())
|
||||
|
||||
|
||||
|
||||
class AdminModel2Mixin(Admin2Mixin, AccessMixin):
|
||||
modeladmin = None
|
||||
|
|
@ -70,7 +87,9 @@ class IndexView(Admin2Mixin, generic.TemplateView):
|
|||
})
|
||||
return data
|
||||
|
||||
class ModelListView(AdminModel2Mixin, generic.ListView):
|
||||
|
||||
class ModelListView(Admin2Mixin, generic.ListView):
|
||||
|
||||
default_template_name = "model_list.html"
|
||||
permission_type = 'view'
|
||||
|
||||
|
|
@ -79,6 +98,10 @@ class ModelListView(AdminModel2Mixin, generic.ListView):
|
|||
context['model'] = self.get_model()._meta.verbose_name
|
||||
context['model_pluralized'] = self.get_model()._meta.verbose_name_plural
|
||||
return context
|
||||
|
||||
def get_success_url(self):
|
||||
view_name = 'admin2:{}_{}_detail'.format(self.app_label, self.model_name)
|
||||
return reverse(view_name, kwargs={'pk': self.object.pk})
|
||||
|
||||
|
||||
class ModelDetailView(AdminModel2Mixin, generic.DetailView):
|
||||
|
|
@ -99,6 +122,10 @@ class ModelAddFormView(AdminModel2Mixin, generic.CreateView):
|
|||
default_template_name = "model_add_form.html"
|
||||
permission_type = 'add'
|
||||
|
||||
def get_success_url(self):
|
||||
view_name = 'admin2:{}_{}_detail'.format(self.app_label, self.model_name)
|
||||
return reverse(view_name, kwargs={'pk': self.object.pk})
|
||||
|
||||
|
||||
class ModelDeleteView(AdminModel2Mixin, generic.DeleteView):
|
||||
success_url = "../../"
|
||||
|
|
|
|||
Loading…
Reference in a new issue