Django过滤器只有在“类别” isset! [英] Django filter only if the "category" isset!

查看:103
本文介绍了Django过滤器只有在“类别” isset!的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



如果请求被设置,我只需要过滤即可。



恩。如果性别未设置,则过滤器将为:
Test.objects.filter(categories = category,brands = brand)

  def index(request):
gender = request.GET.get('gender')
category = request.GET.get('category')
brand = request.GET。 get('brand')

Test.objects.filter(genders = gender,categories = category,brands = brand)


解决方案

如果您意识到过滤条件可以作为关键字参数传递,解决方案变得更容易可视化。例如请考虑下面的代码段。这是一个简单的方法:

  conditions = dict()

for filter_key,form_key in(('genders','gender'),('categories','category'),('brands','brand')):
value = request.GET.get(form_key,None)
如果值:
条件[filter_key] =值

Test.objects.filter(**条件)

当然,这样做的另一种方法是使用表单而不是直接从GET请求中获取值。


How can I do this?

I only what to filter if the request is set.

ex. if gender not set, the filter will be: Test.objects.filter(categories=category, brands=brand)

def index(request):
    gender = request.GET.get('gender')
    category = request.GET.get('category')
    brand = request.GET.get('brand')

    Test.objects.filter(genders=gender, categories=category, brands=brand)

解决方案

If you realize that filter conditions can be passed in as keyword arguments the solution becomes easier to visualize. For e.g. consider the snippet below. This is a verbose way of doing it:

conditions = dict()

for filter_key, form_key in (('genders',  'gender'), ('categories', 'category'), ('brands', 'brand')):
    value = request.GET.get(form_key, None)
    if value:
        conditions[filter_key] = value

Test.objects.filter(**conditions)

Of course another way of doing this would be to use a form rather than pick up the values directly from the GET request.

这篇关于Django过滤器只有在“类别” isset!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆