按字典的Django过滤模型

JRE*_*EAM 11 django django-models

如何使用Dictionary而不是方法参数对Django模型进行过滤?这就是我在这里:

class StoreView(TemplateView):

    def get(self, request):

        # A bunch of gets
        sort = request.GET.get('sort')
        sort_price = request.GET.get('sort_price')
        sort_mfr_method = request.GET.get('mfr_method')

        # The params tpsort by
        sort_params = {}

        if sort is not None:
            sort_params['sort'] = sort

        if sort_price is not None:
            sort_params['sort_price'] = sort_price

        if sort_mfr_method is not None:
            sort_params['sort_mfr_method'] = sort_mfr_method

        # The Model Query
        design_list = models.Design.objects.filter(sort_params)

        # etc...
Run Code Online (Sandbox Code Playgroud)

Side Question,有没有比我上面做的更好的设置字典值的方法?比如三元,但是如果不存在那么价值就不存在了吗?

sort_params['sort'] = sort if not None else ''
Run Code Online (Sandbox Code Playgroud)

Pav*_*sov 22

您使用字典来传递关键字参数,如下所示:

models.Design.objects.filter(**sort_params)
Run Code Online (Sandbox Code Playgroud)

 

没有内置的方法来有条件地设置一个dict键,但如果你这么做,你可以编写自己的:

def set_if_not_none(mapping, key, value):
    if value is not None:
        mapping[key] = value

class StoreView(TemplateView):

    def get(self, request):

        # A bunch of gets
        sort = request.GET.get('sort')
        sort_price = request.GET.get('sort_price')
        sort_mfr_method = request.GET.get('mfr_method')

        # The params tpsort by
        sort_params = {}

        set_if_not_none(sort_params, 'sort', sort)
        set_if_not_none(sort_params, 'sort_price', sort_price)
        set_if_not_none(sort_params, 'sort_mfr_method', sort_mfr_method)

        # The Model Query
        design_list = models.Design.objects.filter(**sort_params)
Run Code Online (Sandbox Code Playgroud)


Vam*_*lla 5

上面的答案是对的,我建议一些更有效的答案.

这里request.GET是QueryDict只需将它转换为这样的字典

kwargs = dict(request.GET)

现在过滤它

models.Design.objects.filter(**kwargs)