2011-09-27 3 views
0

장고를 사용하여 첫 번째 응용 프로그램을 만들려고합니다. 다음 코드를 사용하여 이벤트 목록을 만듭니다.Django는 모든 관련 선택 항목을 얻습니다. Event = Event.id

{% for Event in location_list %}       
{{ Event.lat }}, {{ Event.long }}, 
html: "{{ Event.id }}", 
}] 
{% endfor %} 

나는 코드를 수정해야하므로

{{ Event.id }} 

이가되도록

{{ Get all Choice in choice_list WHERE event IS Event.id }} 

이 작업을 수행하는 올바른 구문은 무엇입니까 같은?

Model.py

from django.db import models 

class Event(models.Model): 
    info = models.CharField(max_length=200) 
    long = models.CharField(max_length=200) 
    lat = models.CharField(max_length=200) 

def __unicode__(self): 
    return self.info 

class Choice(models.Model): 
    event = models.ForeignKey(Event) 
    choice = models.CharField(max_length=200) 
    link = models.CharField(max_length=200) 

def __unicode__(self): 
    return self.choice 

내가

012로

{{ Event.id }} 

를 교체 한

views.py

def index(request): 
location_list = Event.objects.all() 
choice_list = Choice.objects.all() 
t = loader.get_template('map/index.html') 
c = Context({ 
      'location_list': location_list, 
      'choice_list': choice_list, 
      }) 
return HttpResponse(t.render(c)) 

업데이트
{% for choice in event.choice_set.all %} {{ choice }} {% endfor %} 

이벤트를 인쇄하지 않습니다.

+0

'Event' 모델과 개별'event's 사이에 혼란을 피하기 위해 이벤트 객체에 대한 소문자 변수 이름을 사용하는 것이 좋습니다. {{% for location_list % in event}} – Alasdair

답변

2

follow relationships backward 인 것처럼 보입니다.

# In the shell 
# fetch events from the db 
>>> events = Event.objects.all() 
>>> for event in events: 
...  # fetch all the choices for this event 
...  event_choices = event.choice_set.all() 
...  print event_choices 

템플릿에서 메서드 호출에 괄호를 포함하지 않습니다.

{% for event in location_list %}       
    {{ event.lat }}, {{ event.long }} 
    <ul> 
    {% for choice in event.choice_set.all %} 
     <li>{{ choice }}</li> 
    {% endfor %} 
    </ul> 
{% endfor %} 

당신은 당신의 외래 키 정의에 related_name 매개 변수를 정의 할 수 있습니다 :

class Choice(models.Model): 
    event = models.ForeignKey(Event, related_name="choices") 

그런 다음 당신은 당신의 템플릿에 뷰에서 event.choices.all(){% for choice in event.choices.all %}를 사용할 수 있습니다.

+0

왜 이벤트를 이벤트로 정의할까요? .objects.get (id = 1). 이벤트 (id = 1)가 location_list에있는 많은 이벤트 중 하나 일 때. –

+1

좋은 질문입니다. 보기에서'event = Event.objects.get (id = 1)'을 꺼내야한다는 뜻은 아니 었습니다. 저는 선택의 여지를 보여줄 수 있도록 이벤트를 정의하고있었습니다. 나는 대답을 편집 했으니 바라건대 지금은 분명하다. – Alasdair

+0

이제 {% {choice} % {{choice}} {% choicefor %} 코드에서 {% for choice}를 사용하고 있지만 'event'를 정의하는 방법을 모르면 각 'event in location list'에서 작동합니다. 내 질문을 내 views.py를 포함하도록 업데이트했습니다. –

관련 문제