如何在模板中显示具有外键关系的元素?
Posted
技术标签:
【中文标题】如何在模板中显示具有外键关系的元素?【英文标题】:How do I display elements in a template that have foreignkey relationships? 【发布时间】:2012-11-12 13:50:27 【问题描述】:我正在尝试显示用户保存为播放列表一部分的每个视频的视频网址。用户也可以保存多个播放列表(视图中的第一行显示所有播放列表)。不过,我正在努力弄清楚如何在每个播放列表中显示视频。有什么建议吗?
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)
模板:profiles.html
% for feed in playlist %
feed
<br>
% endfor %
【问题讨论】:
【参考方案1】:可以使用.
访问外键关系来跨越关系
feed.playlist.playlist
feed.profile.username
因为这是UserPlaylist
对象的查询集,所以它们具有profile
或playlist
属性。
不过要小心!我确实相信每次访问外部关系时都会进行单独的查询。我不确定,但值得在调试工具栏或其他东西上查看。
根据 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 %
【讨论】:
你知道我将如何访问每个用户播放列表中的视频吗? % for feed in playlist.videoplaylist_set.all % [model]_set.all 将遵循“向后”的关系。 docs.djangoproject.com/en/dev/topics/db/queries % endfor % 我正在使用 feed.videoplaylist_set.all 但我无法显示视频网址。我试过 feed.videoplaylist_set.videos.all 但这似乎也不起作用。 @sharataka 给出了例子,做一些教程和阅读关于如何查询模型的 django 书会很有帮助。另外我认为这会进行大量查询,可能是分析它的好主意以上是关于如何在模板中显示具有外键关系的元素?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Django中查询具有特定数量的外键关系并且在这些外键值中具有特定值的对象?