Django中的嵌套查询集

时间:2016-08-13 18:41:25

标签: 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

我希望我的模板显示每个城市,并且每个城市下都有自己的投资组合,并且每个城市下都有其属性。我是Django的新手,来自AngularJS,我可以这样做,在我的循环中抛出过滤器(显然在Django中不起作用,至少我是怎么做的):< / p>

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

有什么想法吗?可能有一个简单的解决方案,我只能用语言表达。我发现这样做的唯一方法是为每个城市创建一个自定义查询集,然后为每个组合创建一个自定义查询集,但必须有更好的方法来实现这一点。

1 个答案:

答案 0 :(得分: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

你应该好好去