django如何使用exists()

django如何使用exists(),django,django-queryset,exists,Django,Django Queryset,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 contain

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")
if some_queryset.filter(pk=123).exists():
    print("Entry contained in queryset")
我被什么是查询集弄糊涂了。在上述示例中,不会:

entry = Entry.objects.get(pk=123)
if entry.filter(pk=entry.pk).exists():
   print("Entry contained in queryset")
更有意义吗

我们能做到:

if some_queryset.filter(pk=123).exists():
    print("Entry contained in queryset")
if some_queryset.filter(pk=123).exists():
    print("Entry contained in queryset")
。Django文档仅使用该示例首先获取
条目
,以证明
条目
记录中存在
条目
,且
pk=123
。然后,如果要检查它是否也存在于
某些查询集中(例如
.filter(…)
ed版本的
Entry.objects.all()
),可以使用
.filter(pk=Entry.pk)

但是您不需要首先获取
条目
对象,如果您事先知道主键,那么您就可以直接使用它了。毕竟,
entry.pk
只是
123
,对于
.filter()
子句,该数据的来源并不重要

我被什么是查询集弄糊涂了


其思想是,它们在这里有一个
some\u queryset
,这是
条目
对象上的
queryset
。例如,它可以是一个
条目.objects.filter(pub\u date\u year=2010)
,因此是一个经过筛选的查询集。如果您想知道
条目
是否是此筛选查询集的成员,可以使用
some_queryset.filter(pk=123).exists()
检查具有
pk=123
条目
是否是此查询集的成员。在这种特定情况下(使用
pub\u date\u year=2010
),我们检查
Entry
是否属于2010年发布的
Entry
s。

因此,在本例中是一些queryset=Entry,即if Entry.filter(pk=Entry.pk)。exists():@DCR:
一些查询集不能是
Entry
<代码>条目
条目
对象,而不是
条目
查询集
<代码>一些查询集可以是例如
Entry.objects.all()
,或者
Entry.objects.filter(发布日期\uu年=2010)
。我不明白。开始怀疑django是否值得花时间。entry=entry.objects.get(pk=123),条目不是一个查询集吗?@DCR:no,
.get(…)
将检索一条记录,从而生成一个
条目
。如果您使用
Entry.objects.filter(pk=123)
,那么您会得到一个
QuerySet
(使用
.filter(…)
),但是它当然没有
.pk
,因为
QuerySet
是一个对象的(惰性)集合。您如何在一些未声明或定义的查询集上运行筛选器?