如何在模板中显示具有外键关系的元素?

时间:2012-11-12 13:50:27

标签: python django django-models views

我正在尝试为用户保存为播放列表一部分的每个视频显示视频网址。用户也可以保存多个播放列表(视图中的第一行显示所有播放列表)。我正在努力弄清楚如何在每个播放列表中显示视频。有什么建议吗?

views.py

def profile(request):
    playlist = UserPlaylist.objects.filter(profile=request.user)

    return render_to_response('reserve/templates/profiles.html', {'playlist':playlist},
        context_instance=RequestContext(request))

models.py

class Playlist(models.Model):
    playlist = models.CharField('Playlist', max_length = 2000, null=True, blank=True)
    def __unicode__(self):
        return self.playlist

class Video(models.Model):
    video_url = models.URLField('Link to video', max_length = 200, null=True, blank=True)
    def __unicode__(self):
        return self.video_url

class UserPlaylist(models.Model):
    profile = models.ForeignKey(User)
    playlist = models.ForeignKey(Playlist)
    def __unicode__(self):
        return unicode(self.playlist)

class Videoplaylist(models.Model):
    video = models.ForeignKey(Video)
    playlist = models.ForeignKey(UserPlaylist)
    def __unicode__(self):
        return unicode(self.playlist)

template:profiles.html

{% for feed in playlist %}

    {{feed}}

    <br>

{% endfor %}

1 个答案:

答案 0 :(得分:0)

可以使用.来跨越关系来访问外键关系

{{ feed.playlist.playlist }}

{{ feed.profile.username }}

由于这是UserPlaylist个对象的查询集,因此它们具有profileplaylist属性。

虽然小心!我相信每次访问外国关系时都会进行单独的查询。我不确定但是值得在调试工具栏上查看。

根据Victor'Chris'Cabral的说法,你可以使用

向后跨越关系

[model_you_want_to_span]_set.all

您也可以使用

在视图中执行此查找

vpls = Videoplaylist.objects.filter(playlist__profile=request.user)

{% for feed in playlist %}    
    {{feed}}
    {% for vpl in feed.videoplaylist_set.all %}    
      {{ vpl.video.video_url }}    
    {% endfor %}    
    <br>    
{% endfor %}