0

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

视图.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))

模型.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)

模板:profiles.html

{% for feed in playlist %}

    {{feed}}
    
    <br>

{% endfor %}
4

1 回答 1

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 %}
于 2012-11-12T13:54:29.100 回答