assuming this is my models
class Organizer(models.Model):
# properties
class Event(models.Model):
organizer = models.ForeignKey(Organizer,on_delete=models.CASCADE)
# other properties
class Ticket(models.Model):
event = models.ForeignKey(Event,on_delete=models.CASCADE)
# other properties
class Register(models.Model):
ticket = models.ForeignKey(Ticket, on_delete=models.SET_NULL, null=True)
I have a Organizer object org_obj and I want to get a list of all events that have more than 20 registers made for this Organizer
this is my code:
events = Event.objects.filter(organizer=org_obj)
event20 = []
for e in events.iterator():
tickets = Ticket.objects.filter(event=e)
tickets_sold = 0
for t in tickets.iterator():
tickets_sold += Register.objects.filter(ticket=t).count()
if tickets_sold > 20:
event20.append(e)
is there to improve this query not using loops?
In plain SQL this should be possible with join expressions and Subqueries.