zoukankan      html  css  js  c++  java
  • Django——当搜索模型对象的属性是一个可变的动态字段

    场景:

      准备做一个供前端搜索的功能,但是搜索的字段是指定的,可选项是数据库中该字段有的,因为这样的去重获取字段可选项,逻辑都是一样的,所以可以在一个方法里面写,也就出现了Model.objects.filter搜索的是一个动态可变的字段

    思路:

      后来在django.shortcuts.get_object_or_404方法里面获得了启发

    def get_object_or_404(klass, *args, **kwargs):
        queryset = _get_queryset(klass)
        if not hasattr(queryset, 'get'):
            klass__name = klass.__name__ if isinstance(klass, type) else klass.__class__.__name__
            raise ValueError(
                "First argument to get_object_or_404() must be a Model, Manager, "
                "or QuerySet, not '%s'." % klass__name
            )
        try:
            return queryset.get(*args, **kwargs)
        except queryset.model.DoesNotExist:
            raise Http404('No %s matches the given query.' % queryset.model._meta.object_name)

    解决办法:

    FutureCargoModel.objects.filter(**{'product': 1})
    Out[28]: <QuerySet [<FutureCargoModel: SEGU6222004>, <FutureCargoModel: HFVBORE>]>

    FutureCargoModel.objects.filter(**{'product__value': '阿尔法'}) Out[29]: <QuerySet [<FutureCargoModel: SEGU6222004>, <FutureCargoModel: HFVBORE>]>

    field = 'product' FutureCargoModel.objects.filter(**{field: 1}) Out[31]: <QuerySet [<FutureCargoModel: SEGU6222004>, <FutureCargoModel: HFVBORE>]> FutureCargoModel.objects.filter(**{f'{field}__value': '阿尔法'}) Out[32]: <QuerySet [<FutureCargoModel: SEGU6222004>, <FutureCargoModel: HFVBORE>]>

    这样就达到了动态筛选

    就很nice~

  • 相关阅读:
    一篇文章让你搞懂原型和原型链
    数据库命令
    python序列(十)字典
    华为路由器基础知识和命令
    python列表(九)元组
    python初学者-计算小于100的最大素数
    python初学者-计算1-99奇数的和
    python初学者-使用for循环用四位数组成不同的数
    python初学者-使用for循环做一个九九乘法表
    python初学者-使用if条件语句判断成绩等级
  • 原文地址:https://www.cnblogs.com/pywjh/p/14688201.html
Copyright © 2011-2022 走看看