【问题标题】:Django filter only if the "category" isset!Django 仅在“类别”设置时过滤!
【发布时间】:2011-04-07 18:20:09
【问题描述】:

我该怎么做?

如果设置了请求,我只过滤什么。

例如。如果未设置性别,过滤器将是: 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)

【问题讨论】:

    标签: django filter


    【解决方案1】:

    如果您意识到过滤条件可以作为关键字参数传入,则解决方案变得更易于可视化。例如考虑下面的sn-p。这是一种冗长的方法:

    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)
    

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

    【讨论】:

    • 太棒了!! - 感谢您的回答!
    【解决方案2】:
    def index(request):
        gender = request.GET.get('gender', None)
        category = request.GET.get('category')
        brand = request.GET.get('brand')
    
    results = Test.objects.filter(categories=category, brands=brand)
    if gender:
        results = results.filter(genders=gender)
    

    如果没有指定gender,gender变量将设置为None,所以following ifgender block不会被执行。

    【讨论】:

    • Manoj Govindan 的回答是更短的方法(:
    猜你喜欢
    • 1970-01-01
    • 2010-12-19
    • 2020-06-11
    • 2020-01-23
    • 1970-01-01
    • 2020-01-10
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多