2013-03-09 59 views
38

Tôi có một địa điểm, địa điểm này có nhiều sự kiện đang diễn ra ở đó. Mô hình của tôi trông giống như sau:Tra cứu ngược lại Django của các phím nước ngoài

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) 

Tôi muốn hiển thị tất cả các sự kiện đang diễn ra tại một địa điểm nhất định. Làm thế nào tôi có thể làm điều đó? Chế độ xem hiện tại của tôi trông giống như:

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

mô-đun gì các lĩnh vực liên quan quá description = models.TextField()? – donkeyboy72

+0

Trên thực tế, hai mô hình này nằm trong ứng dụng của riêng mình, tôi chỉ đăng chúng lại với nhau để giải thích điểm :) – FLX

Trả lời

55

Bạn có thể sử dụng events = venue.event_set để đi theo con đường khác

Xem Django documentation

+0

Tuyệt vời! Cảm ơn vì điều đó. Tuy nhiên, nếu tôi muốn lặp qua các sự kiện (đối với tôi trong các sự kiện), tôi nhận được đối tượng "RelatedManager" không thể lặp lại " – FLX

+0

, chỉ cần thay đổi nó thành QueryObject, cảm ơn! – FLX

+0

Bạn đã thay đổi nó thành QueryObject như thế nào? – mp3por

3

Chuyển sang vòng khác. Sử dụng mô hình Event.

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

PS: Tôi chưa từng sử dụng get_object_or_404(). Sửa đổi mã cho phù hợp.

+0

Vì vậy, tôi có thể sử dụng gì trong mẫu của mình để hiển thị tiêu đề địa điểm và tất cả các sự kiện diễn ra tại địa điểm này? – FLX

+0

trong mẫu sử dụng {{event.venue.title}} hoặc theo biến {{venue.venue.title}} :) '{% cho i tại địa điểm%} {{i.venue.title}}' – rjv

+0

Tôi hiểu điều đó, nhưng làm cách nào để hiển thị tất cả các sự kiện diễn ra tại địa điểm này? – FLX

3

Đối với những ai có "đối tượng 'RelatedManager' không Iterable"

Thêm tất cả để lấy các yếu tố từ người quản lý .

{% for area in world_areas.all %} 

https://stackoverflow.com/a/16909142/2491526 (không thể thêm này trong bình luận cho câu trả lời đầu tiên)

Các vấn đề liên quan