2016-08-13 4 views
2

Ich habe ein paar Probleme mit meiner Django-App, um anzuzeigen, wie ich es möchte. Mein Modell sieht wie folgt aus:Verschachtelte Suchanfragen in 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 

ich meine Vorlage wollen jede Stadt anzuzeigen, und unter jeder Stadt haben ihre Portfolios und unter jedem Portfolio haben seine Eigenschaften. Ich bin ein bisschen neu zu Django, von AngularJS kommen, wo ich es tun könnte wie folgt Filter in meinem Schleifen zu werfen (natürlich nicht in Django funktioniert, zumindest, wie ich es tue):

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

Irgendwelche Ideen? Es gibt wahrscheinlich eine einfache Lösung, die ich noch nicht verbalisieren kann. Das einzige, was ich so herausgefunden habe, ist, ein benutzerdefiniertes Abfrage-Set für jede Stadt zu erstellen, dann für jedes Portfolio, aber es muss einen besseren Weg geben, dies zu tun.

+0

gut sein, wenn Sie entsprechende Anwendung [ 'prefetch_related()'] (https://docs.djangoproject.com/en/ 1.10/ref/models/queriesets/# prefetch-bezogene) Aufrufe an die Abfrage vor dem Finalisieren, sollten Sie in der Lage sein, die verschachtelte Iteration in der Vorlage naiv auszuführen, ohne weiteren Datenbankzugriff zu verursachen. –

Antwort

1

Wenn Sie die Tatsache ignorieren, dass dies nicht datenbankeffizient ist, ist es am einfachsten, sicherzustellen, dass Sie auf die umgekehrten Fremdschlüsselbeziehungen richtig zugreifen.

etwas tun:

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

Und Sie sollten gehen

Verwandte Themen