如何优化以下Django模型查询?

时间:2015-09-23 20:21:59

标签: django django-models orm

我得到了以下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查找的内容,但我很难在这里应用它。

1 个答案:

答案 0 :(得分:2)

您可以使用联接在一个查询中执行此操作:

Visit.objects.get(room_id=room_id, journey__user_id=user_id)

这实际上是否更快将取决于您的数据库;你应该介绍一下。