【问题标题】:Django: Querying Multiple Foreign KeysDjango:查询多个外键
【发布时间】: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 文件以确保我获得负责该帖子的用户的名字和姓氏?

【问题讨论】:

    标签: python django orm models


    【解决方案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

    【讨论】:

    • 他指定userUser,pk=1。另外,request.user不是登录用户吗?
    • request.useruser 在模板中是等价的
    • 如果您使用 RequestContext 并为您的 TEMPLATE_CONTEXT_PROCESSORS 添加了身份验证,则用户等于 request.user。 docs.djangoproject.com/en/dev/topics/auth/…我之前对此感到困惑,因为我不知道用户总是可用的。
    • ch3ka:是的。你对否决票负责吗?我没有冒犯。我的答案和正确答案差不多。
    • 我是。抱歉,您的回答似乎指向了错误的方向。介意在答案中澄清这一点吗?那么我会删除反对票。
    猜你喜欢
    • 1970-01-01
    • 2019-03-15
    • 2011-02-01
    • 2018-09-01
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 2016-12-26
    • 2019-08-17
    相关资源
    最近更新 更多