它像一个普通的 python 集吗?
假设我有以下查询集
entry_set = Entry.objects.all()
如何检查条目对象 e 是否存在于 entry_set 中?
原文由 Brian 发布,翻译遵循 CC BY-SA 4.0 许可协议
它像一个普通的 python 集吗?
假设我有以下查询集
entry_set = Entry.objects.all()
如何检查条目对象 e 是否存在于 entry_set 中?
原文由 Brian 发布,翻译遵循 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 queryset
或 list(queryset)
你在很大程度上决定了 Django 的性能我已经看到通过避免这种做法我们在应用程序中改进了几十秒的案例。
原文由 Renato César 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答893 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
您可以使用以下代码:
或者最好的方法: