Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django reverse lookup of foreign keys

I have a venue, this venue has many events happening there. My models look like this:

class Event(models.Model):     title = models.CharField(max_length=200)     date_published = models.DateTimeField('published date',default=datetime.now, blank=True)     date_start = models.DateTimeField('start date')     date_end = models.DateTimeField('end date')     def __unicode__(self):         return self.title     description = models.TextField()     price = models.IntegerField(null=True, blank=True)     venue = models.ForeignKey(Venue)  class Venue(models.Model):     title = models.CharField(max_length=200)     date_published = models.DateTimeField('published date',default=datetime.now, blank=True)     venue_latitude = models.CharField(max_length=200)     venue_longitude = models.CharField(max_length=200)     venue_address = models.CharField(max_length=200)     venue_city = models.CharField(max_length=200)     venue_state = models.CharField(max_length=200)     venue_country = models.CharField(max_length=200)     description = models.TextField()     def __unicode__(self):         return u'%s' % (self.title) 

I'd like to display all the events that are happening at a certain venue. How can I do that? My current view looks like:

def detail(request, venue_id):     venue = get_object_or_404(Venue, pk=venue_id)     return render(request, 'venue-detail.html', {'venue': venue}) 
like image 225
FLX Avatar asked Mar 09 '13 03:03

FLX


2 Answers

You can use events = venue.event_set to go the other way.

Note that venue.event_set is a manager object, like Event.objects, so you can call .all, .filter, .exclude and similar on it to get a queryset.

See the Django documentation

like image 51
Ric Avatar answered Oct 04 '22 16:10

Ric


To those who have "'RelatedManager' object is not iterable"

Add all to retrieve the elements from the manager.

{% for area in world_areas.all %} 

https://stackoverflow.com/a/16909142/2491526 (cannot add this in comment to the first answer)

like image 41
Apex Avatar answered Oct 04 '22 17:10

Apex