【问题标题】:Django filter: Finding a best practiceDjango 过滤器:寻找最佳实践
【发布时间】:2019-11-30 00:30:38
【问题描述】:

我正在寻找一种方法来用更少的代码实现过滤器,例如,我当前的过滤器在下面工作正常:

if company == 1:
    unknownFood = food.filter(
        purchase__credit = 2
        company__name__isnull=True
    )
elif company == 2:
    unknownFood = food.filter(
        purchase__credit = 2
        company__name__isnull=False
    )
else:
    unknownFood = food.filter(
        purchase__credit = 2
    )

上面的代码,出现了几行重复​​的代码,我认为这不是最佳实践。

我试图用比上面代码更少的行代码来实现这一点。

给你:

if company == 1:
    isNull = True
elif company == 2:
    isNull = False
else:
    pass

unknownFood = food.filter(
        purchase__credit = 2
        company__name__isnull=isNull
    )

如果我喜欢上述缩短的方式,它会触发我一个错误,因为

company__name__isnull 等于 false 或 true 并且它的第三个块既不为真也不为假

谁能建议我实现这一目标的最佳方法?

【问题讨论】:

  • 如果你有一个工作代码并且正在寻找代码审查,有codereview.stackexchange.com。只要确保检查并遵循他们的指导方针
  • 您发布的两个代码 sn-ps 都会引发语法错误。请粘贴实际代码而不是假设代码。

标签: django django-orm django-filter


【解决方案1】:

你可以这样编码:

unknownFood = food.filter(purchase__credit=2)

if company == 1:
    unknownFood = unknownFood.filter(company__name__isnull=True)
elif company == 2:
    unknownFood = unknownFood.filter(company__name__isnull=False)

【讨论】:

    【解决方案2】:

    在缩短的代码中,您编写的变量 isNull 可以是 undefiend 并且它在您的代码中导致异常。你可以这样解决这个问题:

    unknownFood = food.filter(purchase__credit = 2)
    
    if company in [1,2]:
        unknownFood = unknownFood.filter(company__name__isnull=(company==1))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-01
      • 2015-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 1970-01-01
      • 2014-05-23
      相关资源
      最近更新 更多