Django:如何返回与ForeignKey相关的所有模型,包括这些模型的所有属性?

时间:2014-09-06 18:51:01

标签: python django django-models

我有一个应用程序,我只想在访问该页面时显示页面与之关联的所有URL链接。

它类似于reddit,因为有许多用户页面(也称为subreddits),每个页面都有无限量的与之关联的提交链接。 newlinkposts条记录通过ForeignKey与特定网页相关联。

给定一个页面,哇我可以获得所有相关的newlinkpost对象(包括相应的喜欢,链接评论和发布日期),以便在模板中显示它们吗?

我的newlinkpost对象定义如下:

class newlinkpost(models.Model):
     newlink_tag = models.ForeignKey('userpagename') #tags link to which userpage it belongs to
     link_comment = models.CharField(max_length=128) #comment to go along with post
     post_date = models.DateField(auto_now=True, auto_now_add=False, null=False) #submission     datestamp. later make it track editable posts if edit function is implemented
     url = models.URLField(max_length = 1024, null=False) #actual submitted link
     link_likes = models.IntegerField(null=False, default=0) #need to later create like button which will +1 the value

    def __unicode__(self):
        return self.url

2 个答案:

答案 0 :(得分:1)

在模型中添加ForeignKey,以及在源模型中创建属性(在您的情况下,newlinkpost),允许您找到一个关联对象,Django还创建了一个 target 模型中的相应属性(在您的情况下显然是userpagename)。

默认情况下,此属性以源表命名,因此在您的情况下,它将为newlinkpost_set

这样,您就可以提出自己要回答的问题:哪newlinkpost个对象有userpagename?:

all_links = userpagename_instance.newlinkpost_set.all()

如果您希望应用其他过滤器,则可以改为使用filter方法:

some_links = userpagename_instance.newlinkpost_set.filter(...)

newlinkpost_set属性包含RelatedManager对象,该对象是Manager的子类型,允许您使用可在newlinkpost.objects上使用的同一组方法,使用一些其他方法可以创建新的相关对象。


以下是使用此技术的示例视图:(假设您已将模型类导入到视图模块中):

from django.shortcuts import render

def user_page(request, user_id):
    page = userpagename.get(pk=user_id)
    links = page.newlinkpost_set.all()
    return render(
        request,
        "myapp/user_page.html",
        {
            page: page,
            links: links,
        }
    )

...这里是使用"链接"的一个例子。模板中的变量:

<ul>
{% for link in links %}
    <li><a href="{{ link.url }}">{{ link.link_comment }} - {{ link.link_likes }} likes</li>
{% endfor %}
</ul>

答案 1 :(得分:0)

您只需使用反向关系。

my_userpagename.newlinkpost_set.all()