2017-06-18 9 views
0

私はDjangoを学ぶための簡単なアプリケーションを構築しています。ManyToManyオブジェクトを取得

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を自動作成していないので、それを(おそらくManytomany)UserPortfolioに直接添付する必要はありません。 – Sharpless512

0

アクセス多くの分野に多くの全部またはフィルタのように、それにクエリセットフィルタを適用したり、多くの分野に多くを使用することを数えます。

company = portfolio.Company.all() 

これは多対多フィールドであり、データのシリアル化に必要なため、クエリセット関数を適用する必要があります。

関連する問題