1.stark.py
from django.db.models import Q
class StarkAdmin(object):
search_list=[]
def get_search_list(self):
val=[]
val.extend(self.search_list)
return val
def list(self, request):
#搜索
search_list=self.get_search_list()
#条件
q=request.GET.get('q','')
conn=Q()
conn.connector='OR'
if q:
for field in search_list:
conn.children.append(('%s__contains' %field,q))
queryset = self.model_class.objects.filter(conn).order_by(*self.get_order_by())
#list.html
{% if search_list %}
<form method="get">
<input type="text" name="q" value="{{ q }}">
<input type="submit" value="搜索">
</form>
{% endif %}
方法实现
#app/stark.py
class ArticleStarkAdmin(StarkAdmin):
search_list = ['title']
site.register(Article, ArticleStarkAdmin)
效果
保留原搜索条件
class StarkAdmin(object):
def __init__(self, model_class, site):
self.model_class = model_class
self.site = site
#新增=======
self.request=None
self.back_key='_filter'
def reverse_url(self, row, type):
info = self.model_class._meta.app_label, self.model_class._meta.model_name, type
name = '%s%s_%s' % info
if type == 'add':
url = reverse(name)
elif type == 'list':
url = reverse(name)
origin_condition=self.request.GET.get(self.back_key)
if not origin_condition:
return url
url = '%s?%s' % (url, origin_condition,)
return url
else:
url = reverse(name, kwargs={'pk': row.pk})
if not self.request.GET:
return url
param_str=self.request.GET.urlencode()
new_query_dict=QueryDict(mutable=True)
new_query_dict[self.back_key]=param_str
url = '%s?%s' % (url, new_query_dict.urlencode(),)
return url
def wrapper(self, func):
@functools.wraps(func)
def inner(request, *args, **kwargs):
self.request=request
return func(request,*args, **kwargs)
return inner