如何在django DetailView中根据url参数选择孙子字段

时间:2014-01-30 06:25:06

标签: django django-templates

我正在写一个处理录音的django应用程序。

所以我们有一个这样的类设置:

class Session
   #... fields that belong to the whole Session ... #

class Channel
   session = models.ForeignKey(Session, related_name='channels')

class Annotation
   channel = models.ForeignKey(Channel, related_name='annotations') 
   type = models.CharField(max_length=255)

class Event
   annotation = models.ForeignKey(Annotation, related_name='events')
   start = models.DateTimeField()
   end = models.DateTimeField()

因此,每个Session都有多个音频通道。每个通道可以有多个不同类型的注释,每个注释都有许多与每个通道中的音频对齐的事件。

现在我希望能够访问类似/<session_slug>/<annotation_type>之类的网址,并让视图显示所有频道,只显示网址中类型注释的事件。

目前我在会话中使用DetailView,我希望html模板的结构看起来像这样:

{% for channel in session %}
...
{% with annotation = somehow choose the correct annotation %}
{% for event in annotation %}
... display the event ...
{% end for %}
{% end with %}
...
{% end for %}

显然问题是将正确的注释对象放入模板中。

在django中处理这类问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

如果你要显示多个注释,我会说ListView比DetailView更合适。然后,您可以覆盖get_queryset以按会话过滤注释:

def get_queryset(self):
    return Annotation.objects.filter(channel__session__slug=self.kwargs['slug'])