gpt4 book ai didi

python - Django:如何返回与外键关联的所有模型,包括这些模型的所有属性?

转载 作者:太空宇宙 更新时间:2023-11-03 18:12:15 26 4
gpt4 key购买 nike

我有一个应用程序,我想在访问该页面时简单地显示该页面与其关联的所有 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

最佳答案

当您在模型中添加 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 上使用的同一组方法,以及一些允许您创建新的相关对象的附加方法。

<小时/>

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

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,
}
)

...这是在模板中使用“links”变量的示例:

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

关于python - Django:如何返回与外键关联的所有模型,包括这些模型的所有属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25703640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com