我有一个应用程序,我只想在访问该页面时显示页面与之关联的所有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
答案 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()