В администраторе django я хотел настроить пользовательский фильтр по тегам (теги вводятся с помощью django-tagging )
Я создал ModelAdmin для этого, и он работал нормально, добавляя пользовательский urlconf и изменяя представление списка изменений. Он должен работать с URL-адресами, такими как: http://127.0.0.1:8000/admin/reviews/review/only-tagged-vista/
Но теперь я получаю 'недопустимый литерал для int () с базой 10:' only-tagged-vista ', ошибка, которая означает, что он соответствует странице редактирования обзора вместо страницы пользовательского фильтра, и я не могу понять, почему Раньше это работало, и я не могу найти, какие изменения могли повлиять на это.
Любая помощь приветствуется.
Соответствующий код:
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
Редактировать: Исправлена оригинальная проблема.
Теперь я получаю сообщение «Невозможно отфильтровать запрос после того, как был взят фрагмент». для линии:
cl.result_list = cl.result_list.filter(tags__icontains=tag)
Я не уверен, где этот список результатов нарезается до применения фильтра тегов.
Edit2:
Это из-за self.list_per_page в объявлении ChangeList. Однако пока не нашел правильного решения. Исправление температуры:
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)