簡體   English   中英

Django:如何返回與ForeignKey相關聯的所有模型,包括這些模型的所有屬性?

[英]Django: How to return all models associated with a ForeignKey including all attributes of those models?

我有一個應用程序,我想在訪問該頁面時僅顯示與該頁面相關聯的所有URL鏈接。

它與reddit相似,因為它有許多用戶頁面(又名subreddit),並且每個頁面都有與之關聯的無限可能的已提交鏈接。 newlinkposts記錄通過ForeignKey與某個頁面相關聯。

給定一個頁面,哇,我可以返回所有相關的newlinkpost對象(包括其相應的點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還將在目標模型內創建一個相應的屬性(在您的情況下顯然是userpagename )。

默認情況下,此屬性以源表命名,因此,在您的情況下,它將為newlinkpost_set

這使您可以提出您要回答的問題:哪些newlinkpost對象具有此userpagename newlinkpost

all_links = userpagename_instance.newlinkpost_set.all()

如果您希望應用其他過濾器,則可以改用filter方法:

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

newlinkpost_set屬性包含一個RelatedManager對象,它是Manager的子類型,允許您使用與在newlinkpost.objects上可以使用的相同的方法集,以及一些允許您創建新的相關對象的方法。


這是使用此技術的示例視圖:(假設您已將模型類導入到views模塊中):

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>

您只需要使用反向關系。

my_userpagename.newlinkpost_set.all()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM