首页 > 解决方案 > Django 模板:按 __str__ 的值排序

问题描述

我正在使用 django 3,并且为我的模型附加了str函数:

class SubSubCategory(models.Model):
    subCategory         = models.ForeignKey(SubCategory, on_delete=models.CASCADE)
    name                = models.CharField("Nom du sous sous category"         , max_length=200, )
    description         = models.CharField("Description du sous sous category" , max_length=200, null=True, blank=True)
    def __str__(self):
        description_locale  = self.name + " : " + self.description if self.description else self.name
        hierarchie          = [str(x) for x in [self.subCategory.category, self.subCategory, description_locale]]
        description_totale  = " > ".join(hierarchie)
        return description_totale

我怎么能要求我的模板根据这个str表示来排序我的列表?

我想做类似的事情:

{% for SubSubcategory in object_list|dictsort:'str' %}

但它显然不起作用,因为“str”什么都不是。如何在模板中调用对象的字符串表示形式?将其作为订购单传递?

标签: django

解决方案


一个简单的解决方案可能是将其也作为属性呈现:

class SubSubCategory(models.Model):
    # …

    @property
    def catstr(self):
        return str(self)

    def __str__(self):
        # …

然后你可以对该属性进行排序:

{% for SubSubcategory in object_list|dictsort:'catstr' %}
    …
{% endfor %}

话虽如此,我不确定在模板中排序是个好主意。模板应该只关注呈现逻辑,而不是模板逻辑


推荐阅读