【问题标题】:I want to filter a model but their are many filters and all aren't required django?我想过滤一个模型,但它们有很多过滤器,而且都不需要 django?
【发布时间】:2022-01-21 11:52:49
【问题描述】:

在我的项目中,我想构建一个过滤系统 并且过滤器不是由 1 个字段组成,而是由大约 6 个字段组成,但每个字段都不是必需的 但在后端我必须使用很多查询 就像 3 个字段即将到来:

field1 = form.field1
field2 = form.field2
field3 = form.field3
field3 = form.field4
field4 = form.field5
field5 = form.field6
if field1:
   filter_by_other_field
if field2:
   filter_by_other_field
if field1 and field2:
   filter_by_other_field

但是通过这种方法会产生很多查询 所以你能帮我吗在这种情况下我想使用更少的代码 谢谢

【问题讨论】:

标签: python django


【解决方案1】:

它不应该进行很多查询,因为查询集是惰性求值的,所以它只会在您使用它时进行实际查询...

所以你可以这样做

qs = myobj.objects.all()
if field1: 
   qs = qs.filter(field1=field1)

或者使用 Q 对象

qs = Q(field1="val1")
if field2:
   qs |= Q(field2=field2)

myset = mymodel.objects.filter(qs)

等等

只有当您尝试对查询集执行某些操作时,例如。取第一个带有切片的对象,它将被评估。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-24
    • 2012-03-15
    • 2014-07-18
    • 2019-05-18
    • 2020-07-06
    • 2012-03-13
    • 1970-01-01
    相关资源
    最近更新 更多