2017-06-18 93 views
0

我建立一個簡單的應用程序來學習Django的。獲取多對多對象

Basicly組合可以有多個公司在其中。我想顯示登錄用戶的某個投資組合的公司。

Models.py

class UserPortfolio(models.Model): 
    name = models.CharField(max_length=128, default='X') 
    user = models.ForeignKey(User) 
    #Company = models.ManyToManyField(Company) 

    def __str__(self): 
     return self.name 

class Company(models.Model): 
    name = models.CharField(max_length=128, default='X') 
    slug = models.SlugField(max_length=6, default='X', unique=True) 

    def get_absolute_url(self): 
     return reverse('news:detail',kwargs={'pk': self.pk}) 

    def __str__(self): 
     return self.slug 

class PortfolioCompany(models.Model): 
    UserPortfolio = models.ForeignKey(UserPortfolio) 
    Company = models.ManyToManyField(Company) 

views.py

portfolio = UserPortfolio.objects.filter(user=self.request.user) 
     myPortfolioRel = PortfolioCompany.objects.filter(UserPortfolio=portfolio) 

但現在它只顯示portfolioCompany的ID。

如何顯示UserPortfolio內的公司?

回答

0

啊發現了。我需要反過來工作。

portfolio = UserPortfolio.objects.filter(user=self.request.user) 
myPortfolioCompanies = PortfolioCompany.objects.filter(UserPortfolio__in=portfolio) 
myCompanies= Company.objects.filter(portfoliocompany__in=myPortfolioCompanies) 
+0

我可能不需要PortfolioCompany,因爲那是自動創建的,只是直接附加到UserPortfolio(manytomany)。 – Sharpless512

0

訪問多對多字段並將查詢集過濾器應用於所有字段或篩選或計數以使用多字段。

company = portfolio.Company.all() 

應用查詢集函數是必需的,因爲它是多對多的字段,它是數據序列化所必需的。