Django 如何在模板中提取上下文的相关数据?

Django 如何在模板中提取上下文的相关数据?,django,django-models,django-templates,django-views,Django,Django Models,Django Templates,Django Views,我有以下型号: class Work_Music(MPTTModel): name = models.CharField(max_length=400, null=True, blank=True) key = models.CharField(max_length=10, null=True, blank=True) tonality = models.CharField(max_length=20, null=True, blank=True) tempo =

我有以下型号:

class Work_Music(MPTTModel):
    name = models.CharField(max_length=400, null=True, blank=True)
    key = models.CharField(max_length=10, null=True, blank=True)
    tonality = models.CharField(max_length=20, null=True, blank=True)
    tempo = models.CharField(max_length=500, null=True, blank=True)

    @property
    def is_opera(self):
        return hasattr(self, 'opera')

class Opera(models.Model):
    work = models.OneToOneField(Work_Music, verbose_name=_('work_music'), related_name='opera', on_delete=models.PROTECT)
    librettist = models.ForeignKey(Person, verbose_name=_('librettist'), null=True, blank=True, related_name='person', on_delete=models.PROTECT)

class OperaCast(models.Model):
    opera = models.ForeignKey(Opera, verbose_name=_('opera'), related_name='opera_cast', null=True, blank=True, on_delete=models.PROTECT)
    name = models.CharField(max_length=100, null=True, blank=True)
My view.py是:

class Work_MusicView(TemplateView):
    template_name = 'composers/work_music/work.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)

        piece = Work_Music.objects.get(pk=self.kwargs['pk'])
        piece_tree = Work_Music.objects.get(pk=self.kwargs['pk']).get_family()

        opera = Opera.objects.get(work=self.kwargs['pk'])

    context.update({
        'piece': piece,
        'piece_tree': piece_tree,
        'opera': opera,
        'opera_cast': OperaCast.objects.filter(opera__work=self.kwargs['pk']).order_by('order'),
    })
    return context
对于所有作品,无论是歌剧还是非歌剧,我都会将作品的音乐对象传递给模板,以显示作品的键、名称、音调和节奏。并不是所有的作品都是歌剧


如果一部作品是一部歌剧,我想以一种结构化的方式展示歌剧的唱词家以及歌剧演员。你是怎么做到的?

我有点不明白你想做什么。你能更具体地说明你想在模板中做什么,你尝试了什么,为什么没有成功吗?@schillingt updated你所拥有的已经非常接近成功了。您遇到了什么问题?“opera元数据”未连接到“工件”。因此,我必须将“作品”与“歌剧”和“歌剧演员”相匹配。我需要在上下文中包含更多的结构数据。使用
piece.opera.opera\u cast。模板中的所有
都可以工作。