在Django中获取所有与Event.id相关的Choices

0 投票
1 回答
977 浏览
提问于 2025-04-17 03:09

我正在尝试使用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 %}

撰写回答