admin: ajoute un bouton annuler aux vues de suppression
Ce commit ajoute aussi un AdminSite customisé et une classe BaseModelAdmin pour tous les ModelAdmin; elle surcharge les templates des vues de suppression pour ajouter les boutons. Il a aussi fallu modifier la configuration de django-admin-tools qui ne supporte les surcharge de la classe AdminSite que si celle-ci sont explicitement déclarées. fixes #1939
This commit is contained in:
parent
7241b363c2
commit
25748b344c
|
@ -3,7 +3,7 @@
|
|||
from django.contrib import admin
|
||||
import django.forms.models
|
||||
from django.contrib.sites.models import Site
|
||||
from django.contrib.auth import admin as auth_admin
|
||||
from django.contrib.auth import admin as auth_admin, models as auth_models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.db.models import Q
|
||||
|
||||
|
@ -17,28 +17,46 @@ from models import (AccountingCode, Action, DeliveryPlace, DocumentLicence,
|
|||
ProfileOption, ProfileOptionChoice, Request, Role, RoleAssociation,
|
||||
Status, Transition, User)
|
||||
|
||||
class ProfileAdmin(admin.ModelAdmin, utils.LocalizedModelAdmin):
|
||||
class PolynumAdminSite(admin.AdminSite):
|
||||
pass
|
||||
|
||||
class BaseModelAdmin(admin.ModelAdmin):
|
||||
delete_confirmation_template = 'admin/polynum_delete_confirmation.html'
|
||||
delete_selected_confirmation_template = 'admin/polynum_delete_selected_confirmation.html'
|
||||
|
||||
site = PolynumAdminSite()
|
||||
|
||||
class UserAdmin(auth_admin.UserAdmin, BaseModelAdmin):
|
||||
pass
|
||||
|
||||
class GroupAdmin(auth_admin.GroupAdmin, BaseModelAdmin):
|
||||
pass
|
||||
|
||||
site.register(auth_models.User, auth_admin.UserAdmin)
|
||||
site.register(auth_models.Group, auth_admin.GroupAdmin)
|
||||
|
||||
class ProfileAdmin(BaseModelAdmin, utils.LocalizedModelAdmin):
|
||||
filter_horizontal = [ 'choices', ]
|
||||
list_display = ['id', 'order', 'name', 'display_choices', 'ppd', 'ppp']
|
||||
list_editable = [ 'order' ]
|
||||
|
||||
admin.site.register(Profile, ProfileAdmin)
|
||||
site.register(Profile, ProfileAdmin)
|
||||
|
||||
class ProfileOptionChoiceInline(admin.StackedInline, utils.LocalizedModelAdmin):
|
||||
model = ProfileOptionChoice
|
||||
extra = 0
|
||||
|
||||
class ProfileOptionAdmin(admin.ModelAdmin):
|
||||
class ProfileOptionAdmin(BaseModelAdmin):
|
||||
inlines = [ ProfileOptionChoiceInline, ]
|
||||
list_display = ['id', 'order', 'name', 'visible', 'list_type', 'display_choices']
|
||||
list_editable = ['name', 'order', 'visible', 'list_type']
|
||||
|
||||
admin.site.register(ProfileOption, ProfileOptionAdmin)
|
||||
site.register(ProfileOption, ProfileOptionAdmin)
|
||||
|
||||
class AccountingCodeInline(admin.TabularInline):
|
||||
model = AccountingCode
|
||||
|
||||
class EntityAdmin(admin.ModelAdmin):
|
||||
class EntityAdmin(BaseModelAdmin):
|
||||
list_display = ['pre_code', 'get_name', 'get_description', 'entity_type']
|
||||
fields = [ 'code', 'is_active', 'name', 'description', 'entity_type', 'parent', 'depth',
|
||||
'description_override', 'name_override', 'get_children',
|
||||
|
@ -93,7 +111,7 @@ class HistoryInline(admin.TabularInline):
|
|||
model = History
|
||||
extra = 0
|
||||
|
||||
class RequestAdmin(admin.ModelAdmin):
|
||||
class RequestAdmin(BaseModelAdmin):
|
||||
raw_id_fields = [ 'entity' ]
|
||||
list_display = ['id', 'user', 'uploadfile', 'name', 'nb_pages', 'entity', ]
|
||||
date_hierarchy = 'delivery_date'
|
||||
|
@ -101,7 +119,7 @@ class RequestAdmin(admin.ModelAdmin):
|
|||
'licence', 'copyright', 'usage' ]
|
||||
inlines = [ HistoryInline ]
|
||||
|
||||
class TransitionAdmin(admin.ModelAdmin):
|
||||
class TransitionAdmin(BaseModelAdmin):
|
||||
list_display = [ 'id', 'role', 'source', 'get_name', 'destination',
|
||||
'default', 'warn' ]
|
||||
list_filter = [ 'role', 'source', 'action', 'destination' ]
|
||||
|
@ -112,55 +130,52 @@ class MailNotificationInline(admin.TabularInline):
|
|||
list_filter = ('action', 'to')
|
||||
extra = 0
|
||||
|
||||
class ActionAdmin(admin.ModelAdmin):
|
||||
class ActionAdmin(BaseModelAdmin):
|
||||
inlines = [ MailNotificationInline ]
|
||||
list_display = ('id', 'name', 'comment', 'special_type', 'pages',
|
||||
'validate_request' )
|
||||
list_filter = ('comment', 'special_type', 'validate_request')
|
||||
list_editable = [ 'name', 'comment', 'special_type', 'validate_request' ]
|
||||
|
||||
class StatusAdmin(admin.ModelAdmin):
|
||||
class StatusAdmin(BaseModelAdmin):
|
||||
list_display = ('id', 'name', 'order', 'visible', 'default', 'start', 'end')
|
||||
list_editable = ('name', 'order', 'visible', 'default', 'start', 'end')
|
||||
list_filter = ('visible', 'default', 'start', 'end')
|
||||
filter_horizontal = [ 'visible_by' ]
|
||||
|
||||
admin.site.register(Entity, EntityAdmin)
|
||||
admin.site.register(EntityType)
|
||||
site.register(Entity, EntityAdmin)
|
||||
site.register(EntityType, BaseModelAdmin)
|
||||
|
||||
admin.site.register(Role)
|
||||
site.register(Role, BaseModelAdmin)
|
||||
|
||||
class DeliveryPlaceAdmin(admin.ModelAdmin):
|
||||
class DeliveryPlaceAdmin(BaseModelAdmin):
|
||||
list_display = [ 'id', 'order', 'name', 'description', 'comments' ]
|
||||
list_editable = [ 'order', 'name', 'description', 'comments' ]
|
||||
|
||||
admin.site.register(DeliveryPlace, DeliveryPlaceAdmin)
|
||||
site.register(DeliveryPlace, DeliveryPlaceAdmin)
|
||||
|
||||
class DocumentUsageAdmin(admin.ModelAdmin):
|
||||
class DocumentUsageAdmin(BaseModelAdmin):
|
||||
list_display = [ 'id', 'order', 'name', 'description', 'url', 'comments' ]
|
||||
list_editable = [ 'order', 'name', 'description', 'url', 'comments' ]
|
||||
|
||||
admin.site.register(DocumentUsage, DocumentUsageAdmin)
|
||||
site.register(DocumentUsage, DocumentUsageAdmin)
|
||||
|
||||
class DocumentLicenceAdmin(admin.ModelAdmin):
|
||||
class DocumentLicenceAdmin(BaseModelAdmin):
|
||||
list_display = [ 'id', 'order', 'name', 'description', 'url', 'comments' ]
|
||||
list_editable = [ 'order', 'name', 'description', 'url', 'comments' ]
|
||||
|
||||
admin.site.register(DocumentLicence, DocumentLicenceAdmin)
|
||||
admin.site.register(Request, RequestAdmin)
|
||||
site.register(DocumentLicence, DocumentLicenceAdmin)
|
||||
site.register(Request, RequestAdmin)
|
||||
|
||||
admin.site.register(Status, StatusAdmin)
|
||||
admin.site.register(Action, ActionAdmin)
|
||||
admin.site.register(Transition, TransitionAdmin)
|
||||
site.register(Status, StatusAdmin)
|
||||
site.register(Action, ActionAdmin)
|
||||
site.register(Transition, TransitionAdmin)
|
||||
|
||||
class MailNotificationAdmin(admin.ModelAdmin):
|
||||
class MailNotificationAdmin(BaseModelAdmin):
|
||||
list_display = [ 'action', 'to', 'subject_template' ]
|
||||
list_filter = [ 'action', 'to' ]
|
||||
|
||||
admin.site.register(MailNotification, MailNotificationAdmin)
|
||||
|
||||
# don't show the "Site" model
|
||||
admin.site.unregister(Site)
|
||||
site.register(MailNotification, MailNotificationAdmin)
|
||||
|
||||
class RoleAssociationInline(admin.TabularInline):
|
||||
model = RoleAssociation
|
||||
|
@ -202,4 +217,28 @@ class UserAdmin(auth_admin.UserAdmin):
|
|||
affectation = attr.get('supannEntiteAffectation', [])
|
||||
return u', '.join(affectation)
|
||||
|
||||
admin.site.register(User, UserAdmin)
|
||||
site.register(User, UserAdmin)
|
||||
|
||||
# delegation
|
||||
|
||||
from polynum.delegation.models import Delegation
|
||||
from polynum.delegation.admin import DelegationAdmin as BaseDelegationAdmin
|
||||
|
||||
|
||||
class DelegationAdmin(BaseDelegationAdmin, BaseModelAdmin):
|
||||
pass
|
||||
|
||||
|
||||
site.register(Delegation, DelegationAdmin)
|
||||
|
||||
# editor
|
||||
|
||||
from polynum.editor.models import ContentBlock
|
||||
from polynum.editor.admin import ContentBlockAdmin as BaseContentBlockAdmin
|
||||
|
||||
|
||||
class ContentBlockAdmin(BaseContentBlockAdmin, BaseModelAdmin):
|
||||
pass
|
||||
|
||||
|
||||
site.register(ContentBlock, ContentBlockAdmin)
|
||||
|
|
|
@ -27,7 +27,7 @@ class CustomIndexDashboard(Dashboard):
|
|||
|
||||
site_name = get_admin_site_name(context)
|
||||
|
||||
self.children.append(modules.ModelList(
|
||||
self.children.append(modules.ModelList(
|
||||
_(u'Groupes, utilisateurs et rôles'),
|
||||
layout='inline',
|
||||
draggable=True,
|
||||
|
|
|
@ -18,5 +18,3 @@ class DelegationAdmin(admin.ModelAdmin):
|
|||
user_delegated__display_name.short_description = \
|
||||
models.Delegation._meta.get_field('user_delegated').verbose_name
|
||||
user_delegated__display_name.admin_order_field = 'user_delegated'
|
||||
|
||||
admin.site.register(models.Delegation, DelegationAdmin)
|
||||
|
|
|
@ -1,8 +1,4 @@
|
|||
from django.contrib import admin
|
||||
|
||||
import models
|
||||
|
||||
class ContentBlockAdmin(admin.ModelAdmin):
|
||||
list_display = ('name', 'content')
|
||||
|
||||
admin.site.register(models.ContentBlock, ContentBlockAdmin)
|
||||
|
|
|
@ -198,8 +198,13 @@ CAS_SERVER_URL = None # 'https://www.ent.dauphine.fr/cas/'
|
|||
|
||||
# django-admin-tools
|
||||
# see http://django-admin-tools.readthedocs.org/en/latest/customization.html
|
||||
ADMIN_TOOLS_INDEX_DASHBOARD = 'polynum.dashboard.CustomIndexDashboard'
|
||||
ADMIN_TOOLS_APP_INDEX_DASHBOARD = 'polynum.dashboard.CustomAppIndexDashboard'
|
||||
ADMIN_TOOLS_INDEX_DASHBOARD = {
|
||||
'polynum.base.admin.site': 'polynum.dashboard.CustomIndexDashboard',
|
||||
}
|
||||
ADMIN_TOOLS_APP_INDEX_DASHBOARD = {
|
||||
'polynum.base.admin.site': 'polynum.dashboard.CustomAppIndexDashboard',
|
||||
}
|
||||
|
||||
|
||||
# Session cookies
|
||||
SESSION_COOKIE_AGE = 3600*24 # 1 day
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
{% extends "admin/delete_confirmation.html" %}
|
||||
|
||||
{% block extrastyle %}
|
||||
{{ block.super }}
|
||||
<script src="/static/jquery/js/jquery.js"></script>
|
||||
<script>
|
||||
$(function () {
|
||||
var $button = $('<input style="margin-left: 1em" type="submit" value="Annuler"/>');
|
||||
$button.click(function () {
|
||||
window.location = "..";
|
||||
return false;
|
||||
});
|
||||
$('input[type="submit"]').after($button);
|
||||
$('input[type="submit"]').after($button);
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
|
@ -0,0 +1,17 @@
|
|||
{% extends "admin/delete_selected_confirmation.html" %}
|
||||
|
||||
{% block extrastyle %}
|
||||
{{ block.super }}
|
||||
<script src="/static/jquery/js/jquery.js"></script>
|
||||
<script>
|
||||
$(function () {
|
||||
var $button = $('<input style="margin-left: 1em" type="submit" value="Annuler"/>');
|
||||
$button.click(function () {
|
||||
window.location = "";
|
||||
return false;
|
||||
});
|
||||
$('input[type="submit"]').after($button);
|
||||
$('input[type="submit"]').after($button);
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
|
@ -11,6 +11,7 @@ from utils import decorated_includes
|
|||
import request.urls
|
||||
import delegation.urls
|
||||
from base.decorators import combine_decorators, user_has_validated_cgu
|
||||
from base.admin import site as admin_site
|
||||
|
||||
|
||||
request_decorator = combine_decorators(
|
||||
|
@ -24,7 +25,7 @@ urlpatterns = patterns('',
|
|||
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
|
||||
|
||||
url(r'^admin_tools/', include('admin_tools.urls')), # django-admin-tools
|
||||
url(r'^admin/', include(admin.site.urls)),
|
||||
url(r'^admin/', include(admin_site.urls)),
|
||||
|
||||
url(r'^request/',
|
||||
decorated_includes(request_decorator, include(request.urls.urlpatterns))),
|
||||
|
|
Reference in New Issue