Bri*_*ian 11 python django django-models python-2.7 python-3.x
它像常规的python集吗?
假设我有以下查询集
entry_set = Entry.objects.all()
Run Code Online (Sandbox Code Playgroud)
如何检查entry_set中是否存在Entry Object e?
Sid*_*pta 19
您可以使用以下代码:
if e in Entry.objects.all():
#do something
Run Code Online (Sandbox Code Playgroud)
或者最好的方法:
if Entry.objects.filter(id=e.id).exists():
#do something
Run Code Online (Sandbox Code Playgroud)
小智 6
根据Django文档的最佳方法:https : //docs.djangoproject.com/en/2.1/ref/models/querysets/
if Entry.objects.filter(id=item.id).exists():
# Do something
Run Code Online (Sandbox Code Playgroud)
但是您也可以这样做:
if item in Entry.objects.all():
# Do something
Run Code Online (Sandbox Code Playgroud)
尽管这种方法越糟越好。因为与另一种方法(几乎是在数据库级别完成的所有方法)相比,它将逐个循环从数据库中提取整个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
Run Code Online (Sandbox Code Playgroud)
或者,如果您有ID列表:
if Entry.objects.filter(id__in=[1, 2, 3, 4, 5]).exists():
# Do something
Run Code Online (Sandbox Code Playgroud)
请记住,每次你做len(queryset),item in queryset或者list(queryset)你大量法令的Django的性能。我已经看到了避免这种做法的情况,我们在一个应用程序中改进了数十秒。
| 归档时间: |
|
| 查看次数: |
10967 次 |
| 最近记录: |