2012-05-14 147 views
4

首先,我确定这是一个简单的问题。我刚刚开始使用Django,和所有初学者一样,我想我会构建一个简单的博客。Django:查询多个外键

我有一个简单的数据模型,一个Post模型,包含一个通过FK给用户的链接。

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}) 

我的模板 目前这只是显示相匹配的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 %} 

的ID的用户名我如何修改我的views.py文件以确保我得到负责该帖子的用户的名字和姓氏?

回答

3

查看:

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 %} 
+0

非常感谢阿尔卑斯!我一直在想。我想象着做循环和各种疯狂的巫术。 –

+0

不客气。我也是新来的django,上周开始了。如果您有兴趣,请参阅我目前的(未回答的)问题:) – Alp

+0

我将通过您的问题轻弹一下,看看我能否帮忙。 :) –

1

在模板中使用“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

+0

他分配'user'是'User'与PK = 1。另外,不是'request.user'登录用户吗? – ch3ka

+0

'request.user'和'user'在模板中是等效的 – Alp

+0

如果您使用RequestContext&添加auth到TEMPLATE_CONTEXT_PROCESSORS,则用户等同于request.user。 https://docs.djangoproject.com/zh/dev/topics/auth/#authentication-data-in-templates 由于我不知道用户始终可用,所以我很困惑。 – dannyroa