Strak组件,关键字搜索

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值