我是Django的新手,并且对MVC,DB查询不太有经验。
我有一个Customer表,其中包括customer_name,city_name和state_name(从外键表中拉出)。在HTML中,我试图将结果显示在一个列表中,该列表首先按状态名称,然后按city_name,然后按customer_name名称按字母顺序排序。像这样
ARIZONA
PHOENIX
AAA, Inc.
BBB, LLC.
SCOTTSDALE
AAA, LLC.
DDD, Corp.
CALIFORNIA
ANAHEIM
...
我的model.py如下:
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)
在我的urls.py中,我有:
url("^customers/$",
direct_to_template,
{'template': 'pages_fixed/customers.html',
'extra_context': {'customers': Customer.objects.all().order_by('state')}},
name='customers'),
在我的HTML中,我有一个工作模板,如下所示:
<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>
一切都在工作,但显然排序不正确,我不确定设计它的最佳方法是什么。我尝试使用模板进行一些内部循环,希望模板可以让我定义一些排序规则,但这似乎不受支持/正确。我怀疑我需要以不同的方式查询数据或提前在代码中对它们进行预排序吗?我不确定这是否会在View中完成(Django的Controller形式是什么?)。如果有人能指出我正确的方向,将不胜感激!
模板中显示有序模型对象有多个级别,每个级别都覆盖上一个级别:
ordering
在其答案中显示@Bithin(有关django docs的更多信息)(VIEW LEVEL)QuerySet order_by
方法,如您在视图示例中尝试的那样,如果添加其他字段进行排序,该方法将根据您的需要工作:
Customer.objects.order_by('state', 'city_name', 'customer_name')
(有关django文档的更多信息)。请注意,.all()
此处不需要。
regroup
模板标记需要在您的示例中使用嵌套(有关django docs的更多信息)本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句