merge in from @AndrewIngram for #58

This commit is contained in:
Daniel Greenfeld 2013-05-19 09:47:42 +02:00
parent 6c1a0646fc
commit e963553361
8 changed files with 71 additions and 21 deletions

View file

@ -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

View file

@ -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')
),
)

View file

@ -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>

View file

@ -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 %}

View file

@ -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>

View file

View 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)

View file

@ -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 = "../../"