gpt4 book ai didi

django - 在 Django 中创建自定义列表过滤器

转载 作者:行者123 更新时间:2023-12-01 22:55:01 26 4
gpt4 key购买 nike

我正在扩展 ListFilter 以在 Django 1.4 中为 Django Admin 创建自定义 ListFilter,但 django 会自动将我的查询字符串参数转换为 e=1。有什么办法可以告诉 Django 管理员允许某些参数;而不是将它们转换为 e=1。

这是我的自定义 ListFilter:

class DateRangeListFilter(ListFilter):
""" Custom Date Range Filter using Jquery UI for date-picker """
title = _('date range')
template = 'admin/filter_date.html'

parameters = ['class_after', 'class_before']
parameter_friendly_names = {parameters[0]: 'Class After', parameters[1]: 'Class Before'}
parameter_values = {}
parameter_name = parameters[0]
used_parameters = {parameters[0]: '', parameters[1]: ''}

def __init__(self, request, params, model, model_admin):
super(ListFilter, self).__init__()

for parameter in self.parameters:
value = request.GET.get(parameter, None)
if value:
self.parameter_values[parameter] = value

self.lookup_choices = list(self.lookups())

def has_output(self):
return len(self.lookup_choices) > 0

def lookups(self, *args):
lookup_list = []
for key in self.parameters:
lookup_list.append((key, self.parameter_friendly_names[key]))
return lookup_list

def expected_parameters(self):
return self.parameters

def queryset(self, request, queryset):
return queryset

def choices(self, cl):
for lookup, title in self.lookup_choices:
param_name = title
replace_text = 'gte_icdate' if title == self.parameters[0] else 'lte_icdate'
value = self.parameter_values[lookup] if self.parameter_values.has_key(lookup) else ''
yield {
'param_name': param_name,
'selected': True if lookup is not None else False,
'query_string': cl.get_query_string({param_name: replace_text, }, []),
'value': value,
'display': title,
'replace_text': replace_text,
}

最佳答案

Django 有时太神奇了。几乎可以肯定有一种正确的方法可以做到这一点,而我正在做的可能不是它。但是我修改了我的初始化 从字典中删除我的特殊参数的函数;因此 django 管理员忽略了它。

def __init__(self, request, params, model, model_admin):
super(ListFilter, self).__init__()

for param_key in self.parameters:
if param_key in params.keys():
self.parameter_values[param_key] = params[param_key]
del params[param_key] # This is the anti-magic line
else:
self.parameter_values[param_key] = ''

self.lookup_choices = list(self.lookups())

关于django - 在 Django 中创建自定义列表过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15792884/

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