在Django ORM中使用带有Q的过滤条件,或者简单地获取未过滤的对象并在Python中进行比较,可以提供更好的性能.
employee_qs = employee.objects.filter(state=States.ACTIVE, topic_assn__topic_id=instance.ss_topic_id).select_related('c_data').filter(
Q(c_data__is_null=True) | Q(c_budget__gt=F('c_data__budget_spent') + offset_amt))
V/s/s
employee_qs = employee.objects.filter(state=States.ACTIVE, topic_assn__topic_id=instance.ss_topic_id).select_related('c_data')
for employee in employee_qs:
if not employee.c_data or float(employee.budget)-employee.c_data.budget_spent > offset_amt:
#do something...
在性能方面,这两个 Select 中哪一个会更好?