Django 按字典过滤模型

标签 django django-models

如何使用字典而不是方法参数对 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...

附带问题,有没有比我上面做的更好的设置字典值的方法?例如三元,但如果它不存在,则会使该值不存在?
sort_params['sort'] = sort if not None else ''

最佳答案

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

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

没有内置的方法来有条件地设置 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)

关于Django 按字典过滤模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16018497/

相关文章:

python - Django 在启动时加载资源

python - Django:更新未将记录保存到数据库

mysql - 如何在 GCloud SQL 实例上运行迁移?

python - django-我如何为查询创建排序以将一个特定元素放在第一位,然后按某个字段保留?

python - 为什么 Django 的用户模型将电子邮件字段设置为非唯一?

python - 使用相关对象管理器的创建方法时,django 如何分配外键?

django - Django管理员以表格形式编辑字段

django - 如何使用 django orm 进行嵌套 Group By ?

django - 如何启动 Django 可重用应用程序的测试?

django - Stripe 使用 django 的 webhook 说 : stripe. error.SignatureVerificationError