我正在写一个处理录音的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中处理这类问题的最佳方法是什么?
答案 0 :(得分:0)
如果你要显示多个注释,我会说ListView比DetailView更合适。然后,您可以覆盖get_queryset
以按会话过滤注释:
def get_queryset(self):
return Annotation.objects.filter(channel__session__slug=self.kwargs['slug'])