Django:查询多个外键
Posted
技术标签:
【中文标题】Django:查询多个外键【英文标题】:Django: Querying Multiple Foreign Keys 【发布时间】:2012-05-22 10:32:11 【问题描述】:首先,我确定这是一个简单的问题。我刚刚开始使用 Django,和所有初学者一样,我想我会建立一个简单的博客。
我有一个简单的数据模型,一个包含通过 FK 指向用户的链接的 Post 模型。
models.py
class Post(TimeStampedActivate):
"""
A blog post
"""
title = models.CharField(max_length=255)
slug = models.SlugField()
excerpt = models.TextField(blank=True)
body = models.TextField()
publish_at = models.DateTimeField(default=datetime.datetime.now())
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
active = models.BooleanField(default=False, help_text='Is the blog post active?')
user = models.ForeignKey(User, related_name='post_user')
def __unicode__(self):
return self.title
然后我想要一个页面,其中列出了所有帖子以及创建帖子的人的用户名。我当前的视图如下所示:
views.py
def index(request):
posts = Post.objects.filter(active=True)
user = User.objects.get(id=1)
return render(request, 'blog/index.html', 'posts': posts, 'user': user)
我的模板 目前只显示与 ID 为 1 匹配的用户名。
% for post in posts %
<h2><a href=" post.get_absolute_url "> post.title </a></h2>
<p> post.excerpt|truncatewords:30 </p>
<p>Posted by user.first_name user.last_name </p>
% endfor %
我将如何修改我的 views.py 文件以确保我获得负责该帖子的用户的名字和姓氏?
【问题讨论】:
【参考方案1】:查看:
def index(request):
posts = Post.objects.filter(active=True)
return render(request, 'blog/index.html', 'posts': posts)
模板:
% for post in posts %
<h2><a href=" post.get_absolute_url "> post.title </a></h2>
<p> post.excerpt|truncatewords:30 </p>
<p>Posted by post.user.first_name post.user.last_name </p>
% endfor %
【讨论】:
非常感谢阿尔普!我想多了。我想象着做 for 循环和各种疯狂的巫术。 不客气。我也是 django 的新手,从上周开始。如果您有兴趣,请查看我当前(未回答的)问题:) 我会浏览一下您的问题,看看是否可以提供帮助。 :) 除此答案外,请查看select_related
以防止每次发布额外的数据库查询以获取用户表信息。【参考方案2】:
在您的模板中使用“post.user”,而不仅仅是“user”。
post.user.first_name post.user.last_name
“user”是当前登录的用户。
如果您使用 RequestContext 并将身份验证添加到您的 TEMPLATE_CONTEXT_PROCESSORS,则用户等于 request.user。 https://docs.djangoproject.com/en/dev/topics/auth/#authentication-data-in-templates
【讨论】:
他指定user
为User
,pk=1。另外,request.user
不是登录用户吗?
request.user
和 user
在模板中是等价的
如果您使用 RequestContext 并为您的 TEMPLATE_CONTEXT_PROCESSORS 添加了身份验证,则用户等于 request.user。 docs.djangoproject.com/en/dev/topics/auth/…我之前对此感到困惑,因为我不知道用户总是可用的。
ch3ka:是的。你对否决票负责吗?我没有冒犯。我的答案和正确答案差不多。
我是。抱歉,您的回答似乎指向了错误的方向。介意在答案中澄清这一点吗?那么我会删除反对票。以上是关于Django:查询多个外键的主要内容,如果未能解决你的问题,请参考以下文章