Tout d'abord, j'ai examiné ce Question , mais c'est de plus d'un an . Sûrement maintenant, il y a un bon moyen dans Django 1.1.1 de transporter une sélection de filtres en avant après qu'un utilisateur clique sur le bouton Enregistrer dans l'administrateur. P>
Dans une table avec des milliers d'enregistrements, le filtrage est essentiel. Et si un utilisateur fait plusieurs choix de filtres que les efforts ne devraient pas nécessairement être répétés. P>
4 Réponses :
La réponse est toujours la même: hors de la boîte, Django ne supporte pas ce comportement. Il y a quelques billets dans le numéro de suivi avec des correctifs: # 3777 ,
J'aime la solution middleware. Merci!
Génial, résout un gros problème pour mes utilisateurs! Ce patch a été assis là pendant 6 ans ...
Une autre solution consiste à utiliser cet extrait http://djangosnippets.org/snippets/2531/
Class Modeladmin_perso(admin.ModelAdmin): def add_view(self, request, *args, **kwargs): result = super(Modeladmin_perso, self).add_view(request, *args, **kwargs ) # Look at the referer for a query string '^.*\?.*$' ref = request.META.get('HTTP_REFERER', '') if ref.find('?') != -1: # We've got a query string, set the session value request.session['filtered'] = ref if request.POST.has_key('_save'): """ We only kick into action if we've saved and if there is a session key of 'filtered', then we delete the key. """ try: if request.session['filtered'] is not None: result['Location'] = request.session['filtered'] request.session['filtered'] = None except: pass return result """ Used to redirect users back to their filtered list of locations if there were any """ def change_view(self, request, object_id, extra_context={}): """ save the referer of the page to return to the filtered change_list after saving the page """ result = super(Modeladmin_perso, self).change_view(request, object_id, extra_context ) # Look at the referer for a query string '^.*\?.*$' ref = request.META.get('HTTP_REFERER', '') if ref.find('?') != -1: # We've got a query string, set the session value request.session['filtered'] = ref if request.POST.has_key('_save'): """ We only kick into action if we've saved and if there is a session key of 'filtered', then we delete the key. """ try: if request.session['filtered'] is not None: result['Location'] = request.session['filtered'] request.session['filtered'] = None except: pass return result
Cette fonctionnalité a été une demande au projet Django depuis longtemps (le billet était ouvert il y a 5 ans). P>
Heureusement ce comportement ennuyeux était Correction dans le coffre. Attendez-vous à ce que cela soit inclus dans Django 1.6. P>
Cette fonctionnalité a été ajoutée à Django dans le cadre de la version 1.6 et est activée maintenant par défaut. Il est décrit dans le Notes de version : P>
Modeladmin conserve désormais les filtres sur la liste de la liste après la création, édition ou supprimer un objet. Il est possible de restaurer le précédent Comportement des filtres de nettoyage en définissant l'attribut SRESSE_FILTERS faux. p> blockQuote>