在Django模板中使用多个模型字段重新组合列表

在Django模板中使用多个模型字段重新组合列表,django,templates,Django,Templates,我在Django模板中使用RegroupTag来列出许多项目,按客户分组。我的模型是: class Customer(models.Model): name = models.CharField(max_length=25) city = models.CharField(max_length=25) 我可以列出customer.name(或customer.city)项目,我真正想要的是将它们按“name,city”顺序排列。根据文档“任何有效的模板查找都是RegroupTag的合法

我在Django模板中使用RegroupTag来列出许多项目,按客户分组。我的模型是:

class Customer(models.Model):
  name = models.CharField(max_length=25)
  city = models.CharField(max_length=25)
我可以列出customer.name(或customer.city)项目,我真正想要的是将它们按“name,city”顺序排列。根据文档“任何有效的模板查找都是RegroupTag的合法分组属性,包括方法、属性、字典键和列表项。”[1]如何为此定义方法?我如何从模板中调用它

[1]

更新:我了解重组功能,现在正在使用它,我使用对象的一个字段对列表进行分组。分隔符customer.grouper显示该特定字段的名称。在我的例子中是“customer.name”或“customer.city”。我的目标是一起展示,比如“customer.name,customer.city”(即“Microsoft,Redmond”)。文档中简要提到了这一点,但我无法理解

def display_name(self):
  return "%s, %s" (self.name, self.city)

作为我的客户模型的一部分,我尝试了上述方法来解决我的问题。但是我不确定如何从我的模板中调用它。

您的模型函数是正确的,但它应该在大括号前包含一个
%

def display_name(self):
  return "%s, %s" %(self.name, self.city)
视图应该传递对象列表,而不是值列表

让列表为
tp
,因此您的模板代码应该如下所示:

{% regroup tp by display_name as tp_list %}

<ul>
{% for t in tp_list %}
    <li>{{ t.grouper }}
    <ul>
        {% for item in t.list %}
            <...something of your code....>
        {% endfor %}
    </ul>
    </li>
{% endfor %}
</ul>
{%tp通过显示\u名称为tp\u列表%}
    {t在tp_列表%中的百分比}
  • {{t.gropper}}
      {t.list%中项目的%s} {%endfor%}
  • {%endfor%}

这对你来说应该已经足够好了。

请你在这里详细说明一下你到底想要什么。