我需要找到序列号和对象列表之间的匹配,每个对象都有一个序列号:
型号:
class Beacon(models.Model):
serial = models.CharField(max_length=32, default='0')
首先我写道:
for b in Beacon.objects.all():
if b.serial == tmp_serial:
# do something
break
然后我向前走了一步:
b_queryset = Beacon.objects.all().filter(serial=tmp_serial)
if b_queryset.exists():
#do something
现在,是否还有第二步需要进一步优化?你知道吗
我不认为把我的查询集放到一个列表中做一个列表.索引('tmp\u serial')。你知道吗
我认为你是最好的,但如果你只是想知道对象是否存在
来自django queryset
exists()
https://docs.djangoproject.com/en/1.8/ref/models/querysets/#django.db.models.query.QuerySet.exists如果序列号是唯一的,则可以执行以下操作:
如果您要用同一序列获取多个对象,并计划对每个对象执行某些操作,那么exist将添加一个无用的查询。 相反,您应该:
这里的技巧是
len(matches)
将强制对queryset进行求值(因此您的db将被查询)。之后, 将检索模型实例,您可以在不进行其他查询的情况下使用它们。你知道吗但是,当您使用
queryset.exists()
时,ORM会运行一个非常简单的查询来检查queryset是否会返回任何元素。 然后,如果迭代查询集,则运行另一个查询来获取对象。详见the related documentation。你知道吗总而言之:use仅在您希望检查queryset是否返回结果时才存在。如果您确实需要queryset数据,请使用
len()
。你知道吗相关问题 更多 >
编程相关推荐