Python 灵活搜索页面的良好实践-Django

Python 灵活搜索页面的良好实践-Django,python,django,django-models,filter,django-queryset,Python,Django,Django Models,Filter,Django Queryset,我只是想知道,在这个话题上,我是否可以从其他人那里借鉴一些例子 我在Django中有一个页面,它使用过滤器来执行搜索 目前,我正在对GET参数进行简单检查,并相应地将.filter()添加到queryset: if color: query.filter(color=color) 这感觉有点像一个丑陋的方式做,我一直有点困惑,想知道我如何才能使它更具活力 有什么想法吗?试试这个: ALLOWED = ('color', 'size', 'model') kwargs = dict(

我只是想知道,在这个话题上,我是否可以从其他人那里借鉴一些例子

我在Django中有一个页面,它使用过滤器来执行搜索

目前,我正在对GET参数进行简单检查,并相应地将.filter()添加到queryset:

if color:
  query.filter(color=color)

这感觉有点像一个丑陋的方式做,我一直有点困惑,想知道我如何才能使它更具活力

有什么想法吗?

试试这个:

ALLOWED = ('color', 'size', 'model')
kwargs = dict(
    (key, value)
    for key, value in request.GET.items()
    if key in ALLOWED
)
query.filter(**kwargs)
这将允许您发出如下请求:
/search/?color=red&size=1
/search/?model=Nikon&color=black

尝试以下操作:

ALLOWED = ('color', 'size', 'model')
kwargs = dict(
    (key, value)
    for key, value in request.GET.items()
    if key in ALLOWED
)
query.filter(**kwargs)

这将允许您发出这样的请求
/search/?color=red&size=1
/search/?model=Nikon&color=black

不行!这太棒了!您可以使用刚才向我展示的方法将dicts与任何函数一起使用吗?对DateTime有什么建议吗?您可以,但您不能使用国际字符作为关键字参数的名称,如果您想这样做,您应该使用以下语法:def test(**kwargs):param=kwargs['Пааааааааааа1072#做点什么。对于日期时间,您需要添加解析。用于此。代码会更复杂一点。不可能!这太棒了!您可以使用刚才向我展示的方法将dicts与任何函数一起使用吗?对DateTime有什么建议吗?您可以,但您不能使用国际字符作为关键字参数的名称,如果您想这样做,您应该使用以下语法:def test(**kwargs):param=kwargs['Пааааааааааа1072#做点什么。对于日期时间,您需要添加解析。用于此。代码会稍微复杂一些。