1 # -*- encoding: utf-8 -*-
4 from django
.contrib
import admin
5 from django
.contrib
import messages
6 from django
.shortcuts
import redirect
7 from models
import AUFMetadata
9 AUF_METADATA_READONLY_FIELDS
= ('supprime',
17 'user_desactivation', )
19 AUF_METADATA_FIELDSET_FIELDS
= ('actif', 'date_creation', 'user_creation',
20 'date_modification', 'user_modification',
21 'date_activation', 'user_activation',
22 'date_desactivation', 'user_desactivation',)
24 class AUFMetadataInlineAdminMixin(object):
25 exclude
= AUF_METADATA_READONLY_FIELDS
+ ('actif', )
28 class AUFMetadataAdminMixin(object):
30 Surcharge l'admin de base, pour setter automatiquement les metadata.
32 actions
= ['desactiver', ]
34 readonly_fields
= AUF_METADATA_READONLY_FIELDS
37 'classes': ('collapse',),
38 'fields': AUF_METADATA_FIELDSET_FIELDS
,
42 def desactiver(modeladmin
, request
, queryset
):
44 Passe à actif = False tous les objets du QS
46 selected
= request
.POST
.getlist(admin
.ACTION_CHECKBOX_NAME
)
47 queryset
.update(actif
=False)
48 messages
.add_message(request
, messages
.INFO
, u
'Les %s ont été désactivés.' % queryset
.model
._meta
.verbose_name_plural
)
49 info
= queryset
.model
._meta
.app_label
, queryset
.model
._meta
.module_name
50 return redirect('admin:%s_%s_changelist' % info
)
51 desactiver
.short_description
= u
"Désactiver les éléments sélectionnés"
53 def save_model(self
, request
, obj
, form
, change
):
54 if obj
.user_creation
is None:
55 obj
.user_creation
= request
.user
56 obj
.date_creation
= datetime
.datetime
.now()
57 obj
.user_modification
= request
.user
58 obj
.date_modification
= datetime
.datetime
.now()
59 initial
= getattr(form
, 'initial', None)
61 if form
.initial
['actif'] is True and obj
.actif
is False:
62 obj
.user_desactivation
= request
.user
63 obj
.date_desactivation
= datetime
.datetime
.now()
64 if form
.initial
['actif'] is False and obj
.actif
is True:
65 obj
.user_activation
= request
.user
66 obj
.date_activation
= datetime
.datetime
.now()
69 def has_metadata(self
, instance
):
71 Test si une instance de modele hérite bien de AUFMetadata.
73 test
= getattr(instance
, 'supprime', None)
74 return test
is not None
76 def save_formset(self
, request
, form
, formset
, change
):
78 Mettre les metadata si l'objet est créé ou modifié par inline.
80 instances
= formset
.save(commit
=False)
81 for instance
in instances
:
82 if self
.has_metadata(instance
):
83 self
.save_model(request
, instance
, formset
.form
, change
)
89 def changelist_view(self
, request
, extra_context
=None):
91 Sans filtre sélectionné, on redirige vers les éléments actifs
93 url
= request
.get_full_path()
94 has_filter
= "?" in url
95 if has_filter
is False:
96 q
= request
.GET
.copy()
98 return redirect("%s?%s" % (url
, q
.urlencode()))
99 return super(AUFMetadataAdminMixin
, self
).changelist_view(request
, extra_context
=extra_context
)