2013-03-09 3 views
38

У меня есть место встречи, здесь есть много событий. Мои модели выглядят так:Django обратный поиск внешних ключей

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) 

Я бы хотел показать все события, которые происходят в определенном месте. Как я могу это сделать? Мой текущий вид выглядит так:

def detail(request, venue_id): 
    venue = get_object_or_404(Venue, pk=venue_id) 
    return render(request, 'venue-detail.html', {'venue': venue}) 
+0

Какой модуль эти поля относятся также описание = models.TextField()? – donkeyboy72

+0

На самом деле, эти две модели каждый в своем приложении, я просто разместил их вместе, чтобы объяснить точку :) – FLX

ответ

55

Вы можете использовать events = venue.event_set, чтобы пойти другим путем

Смотрите Django documentation

+0

Отлично! Спасибо за это. Тем не менее, если я хочу перебирать события (для i в событиях), я получаю объект «RelatedManager», который не является итерируемым » – FLX

+0

получил его, просто нужно было изменить его на QueryObject, спасибо! – FLX

+0

Как вы изменили его на QueryObject? – mp3por

3

Идите в обратную сторону. Используйте модель Event.

def detail(request, venue_id): 
    venue = Event.objects.filter(venue__id=venue_id) 
    return render(request, 'venue-detail.html', {'venue': venue}) 

PS: Я никогда не использовал get_object_or_404(). Измените код соответствующим образом.

+0

Итак, что я могу использовать в своем шаблоне для отображения названия места проведения и всех событий, происходящих на этом месте? – FLX

+0

в шаблоне используйте {{event.venue.title}} или в соответствии с вашими переменными {{venue.venue.title}} :) '{% for i в месте размещения%} {{i.venue.title}}' – rjv

+0

Я понимаю, но как мне показать все события, происходящие на этом месте? – FLX

3

для тех, у кого есть «объект„RelatedManager“не Iterable»

Добавить все для извлечения элементов из менеджера ,

{% for area in world_areas.all %} 

https://stackoverflow.com/a/16909142/2491526 (не могу добавить это в комментарии к первому ответу)

Смежные вопросы