django 如何使用 exists()

django how to use exists()

django 文档有以下内容:

entry = Entry.objects.get(pk=123)
if some_queryset.filter(pk=entry.pk).exists():
   print("Entry contained in queryset")

有人可以解释一下这是如何工作的吗?必须执行第一行吗?我们可以这样做吗:

if some_queryset.filter(pk=123).exists():
    print("Entry contained in queryset")

我对 some_queryset 是什么感到困惑。在上面的例子中不会:

entry = Entry.objects.get(pk=123)
if entry.filter(pk=entry.pk).exists():
   print("Entry contained in queryset")

更有意义?

can we just do:

if some_queryset.filter(pk=123).exists():
    print("Entry contained in queryset")

。 Django文档仅以先取Entry为例说明Entrypk=123存在于Entry记录中。如果您随后想检查它是否也存在于 some_queryset 中(例如 Entry.objects.all().filter(…)ed 版本),您可以使用 .filter(pk=entry.pk).

但是你不需要先获取Entry对象,如果你提前知道主键,你已经可以直接使用它了。毕竟 entry.pk 只是 123,对于 .filter() 子句来说,数据的来源是什么并不重要。

I'm confused by what some_queryset is.

想法是他们这里有一个 some_queryset,这是 QuerySet 超过 Entry 个对象。例如,这可以是一个 Entry.objects.filter(pub_date__year=2010),因此是一个被过滤的查询集。如果您随后想知道 entry 是否是此 filtered 查询集的成员,您可以使用 some_queryset.filter(pk=123).exists() 检查 Entry 是否带有 pk=123 是此查询集的成员。在这种特定情况下(pub_date__year=2010),我们因此检查 Entry 是否属于 2010 年发布的 Entrys。