Django:如何有效地查询关系
Django: how to query relations effectively
我有一个模型 "Booking" 使用外键引用另一个模型 "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 中使用它。
我通过重写 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" 方法,但我没有想出如何在我的用例中从中受益。
我的问题是:你会如何解决这个问题?做这样的事情最有效的方法是什么?
您可以在一行中完成此操作:Event.objects.filter(bookings__user=self.request.user)
我有一个模型 "Booking" 使用外键引用另一个模型 "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 中使用它。
我通过重写 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" 方法,但我没有想出如何在我的用例中从中受益。
我的问题是:你会如何解决这个问题?做这样的事情最有效的方法是什么?
您可以在一行中完成此操作:Event.objects.filter(bookings__user=self.request.user)