Reputation: 809
models.py
class Event(models.Model):
name = models.CharField(max_length=100)
date = models.DateField()
class Result(models.Model):
event = models.ForeignKey(Event)
place = models.IntegerField()
person = models.CharField(max_length=100)
gender = models.CharField(max_length=1)
score = models.IntegerField()
Event sample data:
id, name, date
1, 'event1', '2015-01-01'
2, 'event2', '2015-02-01'
3, 'event3', '2015-03-01'
Result sample data:
event_id, place, person, gender, score
1, 1, 'al', 'M', 25
1, 2, 'bob', 'M', 22
1, 3, 'cindy', 'F', 21
1, 4, 'doug', 'M', 20
2, 1, 'elen', 'F', 30
2, 2, 'frank', 'M', 28
2, 3, 'gord', 'M', 20
2, 4, 'helen', 'F', 19
I would like to select all the objects from Event where there is at least one result in Result for that event.
How I'm doing it now:
events = Event.objects.all().order_by('-date')
eventswithresults = []
for event in events:
count = Result.objects.filter(event_id=event).count()
if count > 0:
eventwithresults.append(event)
There must be a djangoier way.
Upvotes: 0
Views: 224
Reputation: 5475
you can do like:
from django.db.models import Count
events = Event.objects.annotate(num_eve=Count('result')).filter(num_eve__gte=1)
Upvotes: 4