【发布时间】:2015-09-23 20:21:58
【问题描述】:
我有以下 Django 模型:
class Journey(models.Model):
user_id = models.PositiveIntegerField(db_index=True)
class Visit(models.Model):
room_id = models.PositiveIntegerField(db_index=True)
is_passed = models.BooleanField(default=False)
journey = models.ForeignKey(Journey)
还有以下方法:
class JourneyService(object):
def get_journey_by_user(self, user_id):
try:
journey = Journey.objects.get(user_id=user_id)
except Journey.DoesNotExist:
raise JourneyNotFoundError
return journey
def get_visit_by_room(self, user_id, room_id):
journey = self.get_journey_by_user(user_id=user_id)
try:
visit = journey.visit_set.get(room_id=room_id)
except Visit.DoesNotExist:
raise VisitNotFoundError
return visit
据我了解,调用 get_visit_by_room 将访问数据库两次。这可以改进为一击吗?我已经阅读了有关 select_related 查找的内容,但我很难在此处应用它。
【问题讨论】:
标签: django django-models orm