在Django中获取所有与Event.id相关的Choices
我正在尝试使用Django创建我的第一个应用程序。我用以下代码来创建一个事件列表。
{% 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
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))
更新
我已经把
{{ Event.id }}
替换成了
{% for choice in event.choice_set.all %} {{ choice }} {% endfor %}
但是它没有打印出任何事件。
1 个回答
2
看起来你想要反向跟踪关系。
# 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 %}
。