0
我有一个模型“预订”引用另一个模型“事件”与外键。Django:如何有效地查询关系
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使用它。
我设法通过重写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
但我敢肯定,那就是没有解决我的问题,需要数据库查询方面的一个非常有效的方式。
我曾考虑过使用“select_related”方法,但我没有想出如何从我的用例中获益。
我的问题是:你会如何解决这个问题?什么是最有效的方式来做这样的事情?
这是一个更简洁的方法,谢谢。我在最后添加了“.distinct()”,以便仅一次获取事件。但是在查询方面效率如何?你能告诉我这会产生多少查询吗? – setchock
啊,是的,可能需要一个独特的。这是一个查询,你可以用'print Event.objects.filter(bookings__user = self.request.user).query'查看它。 –