3
如何使下面的代码更有效率(例如,如何用查询替换循环)?如何消除循环中django查询的低效率?
def get_question(datetime_now, questions_queryset, user):
best_schedule = None
best_question = None
# HOW TO ELIMINATE THE FOLLOWING LOOP AND REPLACE WITH A QUERY?
for question in questions_queryset:
try:
schedule = (Schedule.objects
.filter(question=question, user=user)
.latest(field_name='datetime_added')
except ObjectDoesNotExist:
schedule = None
if (schedule and (schedule.date_show_next >= datetime_now) and
((not best_schedule) or
(schedule.datetime_added >= best_schedule.datetime_added))):
best_schedule = schedule
best_question = question
return best_question
models.py
from django.contrib.auth.models import User
from django.db.models import DateTimeField, ForeignKey, Model, TextField
class Question(Model):
question = TextField()
class Schedule(Model):
datetime_added = DateTimeField(auto_now_add=True)
datetime_show_next = DateTimeField(null=True, default=None)
question = ForeignKey(Question)
user = ForeignKey(User, null=True)
这并不能解决获得最新的日程安排对每个问题的问题 –