它是否像常规的python集?
假设我有以下查询集
entry_set = Entry.objects.all()
如何检查entry_set中是否存在Entry Object e?
答案 0 :(得分:11)
您可以使用以下代码:
if e in Entry.objects.all():
#do something
或者最好的方法:
if Entry.objects.filter(id=e.id).exists():
#do something
答案 1 :(得分:2)
根据Django文档,最佳方法:https://docs.djangoproject.com/en/2.1/ref/models/querysets/
if Entry.objects.filter(id=item.id).exists():
# Do something
但是您也可以这样做:
if item in Entry.objects.all():
# Do something
尽管这种方法尽可能地更糟。因为与另一种方法(几乎是在数据库级别完成的所有操作)相比,它会一个接一个地遍历整个Queryset从数据库中提取元素。
如果您具有ID列表或Queryset,则可以使用__in
带有查询集的示例:
query_ids = other_queryset.values_list('field_id', flat=True)
if Entry.objects.filter(id__in=query_ids).exists():
# Do something
或者如果您有ID列表:
if Entry.objects.filter(id__in=[1, 2, 3, 4, 5]).exists():
# Do something
请记住,每次执行len(queryset)
,item in queryset
或list(queryset)
时,都会严重降低Django的性能。我已经看到了避免这种做法的情况,我们在一个应用程序中改进了数十秒。
答案 2 :(得分:0)
您可以使用in
运算符:
entry_set = Entry.objects.all()
if an_entry in entry_set:
# The element present.
答案 3 :(得分:0)
您可以根据Entry模型中的唯一键过滤查询集。比如,该密钥是id,您的代码将成为:
is_present = Entry.objects.filter(id=e.id)
if is_present:
print "Present"
else:
print "Not Present"