Question

Dans django admin je voulais mettre en place un filtre personnalisé par des balises (tags sont introduits avec django-marquage)

Je l'ai fait le ModelAdmin pour cela et il l'habitude de travailler très bien, en annexant URLconf personnalisé et modifier la vue changelist. Il devrait travailler avec les URL comme: http://127.0.0.1: 8000 / admin / commentaires / évaluation / seulement étiquetée Vista /

Mais maintenant, je reçois « invalide littérale int () avec la base 10: « Vista uniquement étiquetée », erreur qui signifie qu'il conserve correspondant à la page d'édition d'examen au lieu de la page de filtre personnalisé, et je ne peux pas comprendre pourquoi depuis il travaillait et je ne peux pas trouver ce que le changement aurait pu influer sur ce sujet.

Toute aide appréciée.

Code pertinent:

class ReviewAdmin(VersionAdmin):

    def changelist_view(self, request, extra_context=None, **kwargs): 
        from django.contrib.admin.views.main import ChangeList 
        cl = ChangeList(request, self.model, list(self.list_display), 
                        self.list_display_links, self.list_filter, 
                        self.date_hierarchy, self.search_fields,  
                        self.list_select_related, 
                        self.list_per_page, 
                        self.list_editable, 
                        self) 
        cl.formset = None

        if extra_context is None: 
            extra_context = {}

        if kwargs.get('only_tagged'): 
            tag = kwargs.get('tag')
            cl.result_list = cl.result_list.filter(tags__icontains=tag) 
            extra_context['extra_filter'] = "Only tagged %s" % tag

        extra_context['cl'] = cl
        return super(ReviewAdmin, self).changelist_view(request, extra_context=extra_context)

    def get_urls(self): 
        from django.conf.urls.defaults import patterns, url 
        urls = super(ReviewAdmin, self).get_urls()

        def wrap(view):
            def wrapper(*args, **kwargs):
                return self.admin_site.admin_view(view)(*args, **kwargs)
            return update_wrapper(wrapper, view)

        info = self.model._meta.app_label, self.model._meta.module_name 
        my_urls = patterns('', 
                # make edit work from tagged filter list view
                # redirect to normal edit view
                url(r'^only-tagged-\w+/(?P<id>.+)/$',
                    redirect_to,
                    {'url': "/admin/"+self.model._meta.app_label+"/"+self.model._meta.module_name+"/%(id)s"}
                    ),
                # tagged filter list view
                url(r'^only-tagged-(P<tag>\w+)/$',  
                    self.admin_site.admin_view(self.changelist_view), 
                     {'only_tagged':True}, name="changelist_view"), 
        ) 

        return my_urls + urls

Edit:. Question originale fixe

Je reçois maintenant « Impossible de filtrer une requête une fois une tranche a été prise. » pour la ligne:

cl.result_list = cl.result_list.filter(tags__icontains=tag)

Je ne sais pas où cette liste de résultats est coupé en tranches, avant filtre de balise est appliquée.

Edit2: Il est à cause de la self.list_per_page dans la déclaration ChangeList. Cependant n'a pas trouvé encore une solution appropriée. Temp fix:

        if kwargs.get('only_tagged'):
            list_per_page = 1000000
        else:
            list_per_page = self.list_per_page 
        cl = ChangeList(request, self.model, list(self.list_display), 
                        self.list_display_links, self.list_filter, 
                        self.date_hierarchy, self.search_fields,  
                        self.list_select_related, 
                        list_per_page, 
                        self.list_editable, 
                        self) 
Était-ce utile?

La solution

Vous manque un point d'interrogation avant le P '^only-tagged-(P<tag>\w+)/$', de sorte que l'expression ne correspond pas à.

Autres conseils

Dans l'exemple de code ci-dessus, (get_urls) est aligné de sorte qu'il ne fait pas partie de la classe ReviewAdmin mais plutôt une fonction distincte. Je suppose que cela peut causer votre problème si vous avez la même façon dans la source réelle.

L'erreur apparaît sur les étiquettes de plusieurs mots parce que vous devez faire correspondre un mot de balises. cela fonctionne: '- (? P [^ /] +) ^ seulement étiquetée / $' r

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top