Ich bin ziemlich neu in Django, und nicht zu sehr mit MVC, DB Abfragen.Django: Wie schreibe ich Abfrage zu sortieren mit mehreren Spalten, Anzeige über Vorlage
Ich habe eine Customer-Tabelle, die customer_name, city_name, sowie ein state_name (aus einer Fremdschlüsseltabelle gezogen) enthält. Im HTML versuche ich, die Ergebnisse in einer Liste anzuzeigen, die zuerst alphabetisch nach state_name, dann nach city_name und dann nach customer_name sortiert wird. Wie so ..
ARIZONA
PHOENIX
AAA, Inc.
BBB, LLC.
SCOTTSDALE
AAA, LLC.
DDD, Corp.
CALIFORNIA
ANAHEIM
...
Mein model.py wie folgt:
from django.db import models
class Customer(models.Model):
def __unicode__(self):
return self.customer_name
customer_name = models.CharField(max_length=60)
city_name = models.CharField(max_length=30)
state = models.ForeignKey('State')
class State(models.Model):
def __unicode__(self):
return self.state_name
state_name = models.CharField(max_length=20)
state_code = models.CharField(max_length=2)
In meinem urls.py, ich habe:
url("^customers/$",
direct_to_template,
{'template': 'pages_fixed/customers.html',
'extra_context': {'customers': Customer.objects.all().order_by('state')}},
name='customers'),
Und in meinem HTML, habe ich eine Arbeitsvorlage als:
<div class='customers'>
{% for customer in customers %}
<div class='block_customer'>
<p>{{ customer.state.state_name }}</p>
<p>{{ customer.city_name }}</p>
<p>{{ customer.customer_name }}</p>
</div>
{% endfor %}
</div>
Es ist alles Art von arbeiten bu t offensichtlich nicht richtig sortiert und ich bin mir nicht sicher, was der beste Weg ist, es zu entwerfen. Ich probierte einige innere Schleifen mit den Vorlagen aus, hoffte, dass die Vorlagen einige Sortierregeln definieren würden, aber dies scheint nicht unterstützt/korrekt zu sein. Ich vermute, dass ich die Daten anders abfragen oder vorab im Code vorsortieren muss? Ich bin mir nicht sicher, ob dies in der View (was ist Djangos Controller-Form?) Geschehen würde. Wenn mir jemand in die richtige Richtung zeigen könnte, wäre das sehr dankbar!
So ist es eine Möglichkeit, diesen Fall unempfindlich zu machen, mit mehreren Spalten, bei die Ansichtsebene? Ich kann die Syntax dafür nicht finden. Ich weiß, dass "Lower" die Groß- und Kleinschreibung unempfindlich macht, aber ich kann diese Arbeit nicht auf mehrere Spalten anwenden. – Ben