【问题标题】:Django 3.0 Python 3.* - Nested Queries and FiltersDjango 3.0 Python 3.* - 嵌套查询和过滤器
【发布时间】:2020-08-09 03:27:33
【问题描述】:

场景:提供值以过滤某些记录的表单。我有 4 个模型 ABCD

AB

OneToOne关系

BC

ManyToOne关系

CD

ManyToOne关系

给定的表单值是模型D中的一个字段,我要检索的记录在模型A

我试过了:

records= A.objects.filter(
            a_field = "form_given_value_1",
            B__b_field = C.objects.filter( 
                c_field = D.objects.filter(
                    d_field=form_given_value_2
                )
            )
        )

我收到了那个错误:

语法错误:关键字参数重复

然后经过一番搜索,我尝试给出答案here

records = A.objects.filter(
             a_field = "form_given_value_1",
             B__b_field__c_field__d_field = form_given_value_2
          )

它不会给我错误,但它也不会给我记录!..

如何实现这种方法?

【问题讨论】:

    标签: python-3.x django-models django-queryset django-3.0


    【解决方案1】:

    首先您需要检查form_given_value_* 是否为空,因为如果有任何等于空(无输入)filter() 将不返回任何内容

    第二次检查后您需要在检查时将过滤器传递给filter()

    我们实现如下:

        from django.db.models import Q
    
        filters = Q()
        if form_given_value_1:
            filters &= Q(a_field = "form_given_value_1",)
        if form_given_value_2:
            filters &= Q(B__b_field__c_field__d_field = form_given_value_2,)
    
        records = A.objects.filter(filters)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      • 1970-01-01
      • 2017-11-25
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 2013-01-28
      相关资源
      最近更新 更多