2012-05-14 185 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