2013-03-09 19 views
38

Mam miejsce, w tym miejscu odbywa się wiele wydarzeń. Moje modele wyglądają tak:Django odwrotne wyszukiwanie kluczy zagranicznych

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) 

Chciałbym wyświetlić wszystkie wydarzenia, które mają miejsce w określonym miejscu. Jak mogę to zrobić? Mój obecny widok wygląda następująco:

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

Co moduł Pola te dotyczą zbyt description = models.TextField()? – donkeyboy72

+0

W rzeczywistości, te dwa modele są w swojej własnej aplikacji, po prostu wysłałem je razem, aby wyjaśnić punkt :) – FLX

Odpowiedz

55

Można użyć events = venue.event_set iść w drugą stronę

Zobacz Django documentation

+0

Świetnie! Dziękuję za to. Jednakże, jeśli chcę iterować nad zdarzeniami (dla i w zdarzeń) otrzymuję obiekt "" RelatedManager "nie jest iterable" – FLX

+0

dostałem go, tylko potrzebne, aby zmienić go na QueryObject, dzięki! – FLX

+0

Jak to zmienić w QueryObject? – mp3por

3

Przejdź na odwrót. Użyj modelu Event.

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

PS: Nigdy nie używałem get_object_or_404(). Zmień odpowiednio kod.

+0

Więc co mogę użyć w moim szablonie, aby wyświetlić tytuł miejsca i wszystkie wydarzenia odbywające się w tym miejscu? – FLX

+0

w szablonie użyj {{event.venue.title}} lub według zmiennych {{venue.venue.title}} :) '{% for i in venue%} {{i.venue.title}}' – rjv

+0

Rozumiem, ale jak wyświetlić wszystkie wydarzenia w tym miejscu? – FLX

3

do tych, którzy „obiekt«RelatedManager»nie jest iterable”

Dodaj wszystkie do pobierania elementów z menedżerem .

{% for area in world_areas.all %} 

https://stackoverflow.com/a/16909142/2491526 (nie może dodać to w komentarzu do pierwszej odpowiedzi)