如何检查元素是否存在于 Django 查询集中?

新手上路,请多包涵

它像一个普通的 python 集吗?

假设我有以下查询集

entry_set = Entry.objects.all()

如何检查条目对象 e 是否存在于 entry_set 中?

原文由 Brian 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 584
2 个回答

您可以使用以下代码:

 if e in Entry.objects.all():
        #do something

或者最好的方法:

 if Entry.objects.filter(id=e.id).exists():
        #do something

原文由 Siddharth Gupta 发布,翻译遵循 CC BY-SA 4.0 许可协议

根据 Django 文档,最好的方法是: https ://docs.djangoproject.com/en/2.1/ref/models/querysets/#exists

 if Entry.objects.filter(id=item.id).exists():
    # Do something

但你也可以这样做:

 if item in Entry.objects.all():
    # Do something

尽管这种方法是越 糟糕 越好。因为它会遍历整个查询集,一个一个地从数据库中拉取元素,而另一种方法几乎所有的事情都在数据库级别完成。

如果您有一个 id 列表或一个查询集,则可以使用其他方法 __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 querysetlist(queryset) 你在很大程度上决定了 Django 的性能我已经看到通过避免这种做法我们在应用程序中改进了几十秒的案例。

原文由 Renato César 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题