我得到了以下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查找的内容,但我很难在这里应用它。
答案 0 :(得分:2)
您可以使用联接在一个查询中执行此操作:
Visit.objects.get(room_id=room_id, journey__user_id=user_id)
这实际上是否更快将取决于您的数据库;你应该介绍一下。