【问题标题】:django annotate whether exists or notdjango注释是否存在
【发布时间】:2020-07-11 08:15:07
【问题描述】:

我正在使用一个查询:

people = Person.objects.all().annotate(num_pets=Count('pets'))
for p in people:
    print(p.name, p.num_pets == 0)

(Pet is ManyToOne with Person)

但实际上我对宠物的数量并不感兴趣,而只对一个人是否有宠物感兴趣。如何做到这一点?

【问题讨论】:

  • 注释,或过滤
  • 在注释中
  • 你可以像Person.objects.all().annotate(pets_exist=Exists('pets'))一样使用Exists

标签: python sql django


【解决方案1】:

您可以使用Exists expression [Django-doc] 来确定该Person 是否存在Pet。例如:

from django.db.models import Exists, OuterRef

Person.objects.annotate(
    has_pet=Exists(Pet.objects.filter(person=OuterRef('pk')))
)

这里的模型因此是Pet,它有一个名为personForeignKeyPerson。如果字段名称不同,那么您当然应该相应地更新查询。

【讨论】:

    猜你喜欢
    • 2011-08-01
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 2023-03-19
    • 2020-03-28
    • 1970-01-01
    相关资源
    最近更新 更多