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() 

应用查询集函数是必需的,因为它是多对多的字段,它是数据序列化所必需的。