2016-08-13 5 views
2

私のDjangoアプリをどのようにして表示するのに少し問題があります。私のモデルは次のようになります。私は私のテンプレートが各都市を表示したいDjangoのネストされたクエリーセット

class City (models.Model): 
    city_name = models.CharField(max_length=100, unique=True) 

    def __str__(self): 
     return self.city_name 

class Portfolio(models.Model): 
    portfolio_name = models.CharField(max_length=20, unique=True) 
    city = models.ForeignKey(City, db_constraint=False, on_delete=models.CASCADE) 

    def __str__(self): 
     return self.portfolio_name 


class Property (models.Model): 
    portfolio = models.ForeignKey(Portfolio, db_constraint=False, on_delete=models.CASCADE) 
    prop_name = models.CharField(max_length=250, unique=True) 

    def __str__(self): 
     return self.prop_name 

、各都市の下にそのポートフォリオを持って、それぞれのポートフォリオの下でそのプロパティを持っています。

<ul> 
    {% for city in all_cities %} 
    <li> 
     {{ city.city_name }} 
     <ul> 
      {% for portfolio in all_portfolios| portfolio.city = city %} 
      <li> 
       {{ portfolio.portfolio_name }} 
       <ul> 
        {% for property in portfolio.all_properties| property.portfolio = portfolio%} 
        <li> 
         {{ property.prop_name }} 
        </li> 
        {% endfor %} 
       </ul> 
      </li> 
      {% endfor %} 
     </ul> 
    </li> 
    {% endfor %} 
</ul> 
:私は私のループでフィルタを投げるために、このようにそれを行うことができAngularJSから来るジャンゴに新しいビット、(明らかに私はそれをやっている、少なくともどのように、ジャンゴでは動作しません)よ

アイデア?おそらく私はまだ口頭で言えない簡単な解決策があります。このようなことがわかった唯一のことは、都市ごと、そして各ポートフォリオごとにカスタムクエリーセットを作成することですが、これを行うにはより良い方法が必要です。

+0

を行ってもいいである必要があり、適切な[ '()' prefetch_related](https://docs.djangoproject.com/en/ 1.10/ref/models/querysets /#prefetch-related)を呼び出してファイナライズする前に、ネストされた繰り返しをネイティブに行うことができます。 –

答えて

1

これを行うにはデータベースが効率的ではないという事実を無視して、逆の外部キー関係に正しくアクセスしていることを確認するのが最も簡単な方法です。

このような何か:

{% for city in all_cities %} 
    ...blah blah blah 
    {% for portfolio in city.portfolio_set.all %} 
     ... Blah blah 
     {% for property in portfolio.property_set.all %} 
      ... More blah 

をそして、あなたはあなたが適用された場合

関連する問題