【问题标题】:Django filter only if value is givenDjango 仅在给出值时过滤
【发布时间】:2020-06-11 12:34:59
【问题描述】:

我想获取每个国家/地区的网站数量。现在如果没有给出国家,所有国家的站点数量应该是结果。我的查询看起来像:

Devices = GatewayDevice.objects.prefetch_related("model").filter(
            model__site__country=country, end_date=None
        )

在进行查询之前,我可以检查参数 country 是否为 null 并给出它和其他值,例如 ALL(不起作用)。我该如何处理?

【问题讨论】:

标签: python django database filter


【解决方案1】:

最简单的方法就是使用if 语句:

if country is None:
    Devices = GatewayDevice.objects.prefetch_related("model").filter(end_date=None)
else:
    Devices = GatewayDevice.objects.prefetch_related("model").filter(
            model__site__country=country, end_date=None
        )

【讨论】:

  • 这种方法的缺点是,您必须检查所有 N 字段的值
  • @ArakkalAbu N 字段?
  • 要检查countryend_datefield_1...和field_N的空虚情况
  • 是的,那么你需要写Ntimes if loop。
猜你喜欢
  • 2021-09-28
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
相关资源
最近更新 更多