gpt4 book ai didi

django - 自定义 Django 管理 URL + 用于按标签自定义列表过滤器的更改 ListView

转载 作者:行者123 更新时间:2023-12-04 03:19:37 25 4
gpt4 key购买 nike

在 django admin 中,我想通过标签设置自定义过滤器(标签由 django-tagging 引入)

我已经为此制作了 ModelAdmin,它曾经通过附加自定义 urlconf 和修改更改 ListView 来正常工作。它应该适用于以下网址:http://127.0.0.1:8000/admin/reviews/review/only-tagged-vista/

但现在我得到“invalid literal for int() with base 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)

在应用标签过滤器之前,我不确定这个结果列表的切片位置。

编辑2:这是因为 ChangeList 声明中的 self.list_per_page。但是还没有找到合适的解决方案。临时修复:

        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)

最佳答案

您在 '^only-tagged-(P<tag>\w+)/$' 中的 P 之前缺少一个问号, 所以表达式不匹配。

关于django - 自定义 Django 管理 URL + 用于按标签自定义列表过滤器的更改 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1524476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com