Python Django:如何有效地查询关系
我有一个模型“预订”引用另一个模型“事件”与外键Python Django:如何有效地查询关系,python,django,performance,django-queryset,django-select-related,Python,Django,Performance,Django Queryset,Django Select Related,我有一个模型“预订”引用另一个模型“事件”与外键 class Event(models.Model): title = models.CharField(_("title"), max_length=100) class Booking(models.Model): user = models.ForeignKey('auth.User', ..., related_name='bookings') event = models.ForeignKey('Event',
class Event(models.Model):
title = models.CharField(_("title"), max_length=100)
class Booking(models.Model):
user = models.ForeignKey('auth.User', ..., related_name='bookings')
event = models.ForeignKey('Event', ..., related_name='bookings')
我想获取用户预订的所有事件集,以便在列表视图中使用
我通过覆盖ListView的get_queryset方法实现了这一点:
def get_queryset(self):
user_bookings = Booking.objects.filter(user=self.request.user)
events = Event.objects.filter(id__in=user_bookings.values('event_id'))
return events
但我很确定,就所需的数据库查询而言,这并不是解决我的问题的非常有效的方法
我曾经考虑过使用“与选择相关”的方法,但我没有想到在我的用例中如何从中受益
我的问题是:你将如何解决这个问题?这样做最有效的方法是什么?您可以在一行中完成:
Event.objects.filter(bookings\uu user=self.request.user)
您可以在一行中完成:Event.objects.filter(bookings\uu user=self.request.user)
这是一种更干净的方法,谢谢。我在末尾添加了“.distinct()”,以便只获取一次事件。但这在查询方面有效吗?你能告诉我这会产生多少查询吗?啊,是的,可能需要一个明确的答案。这是一个查询,您可以通过打印事件.objects.filter(bookings\uuu user=self.request.user)查看它。查询
。这是一个更简洁的方法,谢谢。我在末尾添加了“.distinct()”,以便只获取一次事件。但这在查询方面有效吗?你能告诉我这会产生多少查询吗?啊,是的,可能需要一个明确的答案。这是一个查询,您可以通过print Event.objects.filter(bookings\uu user=self.request.user.query)查看它。