繁体   English   中英

Django:查询多个外键

[英]Django: Querying Multiple Foreign Keys

首先,我确定这是一个简单的问题。 我刚刚开始使用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})

我的模板目前,这只显示与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文件以确保我获得负责该帖子的用户的名字和姓氏?

视图:

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

在模板中使用“post.user”而不是“user”。

{{ post.user.first_name }} {{ post.user.last_name }}

“user”是当前登录的用户。

如果您使用RequestContext并将auth添加到TEMPLATE_CONTEXT_PROCESSORS,则user等于request.user。 https://docs.djangoproject.com/en/dev/topics/auth/#authentication-data-in-templates

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM