Django Dictsort by __str__

时间:2017-02-22 20:38:00

标签: django templates

我有一个项目,其中一个型号是“Chassis”。我想通过__str__返回的值在django模板中对这些机箱进行排序。如果我写|dictsort:"__str__"它会崩溃。我目前正在编写一个函数getIP,它返回与__str__相同的内容并传递|dictsort:"getIP"

有没有办法做到这一点,而不是简单地在不同的函数中重写完全相同的代码?

1 个答案:

答案 0 :(得分:1)

为什么要在模板中进行排序?在将其传递出去之前在视图中进行排序 - 通常会尝试在可能的情况下将业务逻辑保留在模板之外,这听起来很像业务逻辑。

举个例子,我的一个模特:

class Event(models.Model):

    date = models.DateField()
    location_title = models.TextField()
    location_code = models.TextField(blank=True, null=True)
    picture_url = models.URLField(blank=True, null=True, max_length=250)
    event_url = models.SlugField(unique=True, max_length=250)

    def __str__(self):
        return self.event_url + " " + str(self.date)

    def save(self, *args, **kwargs):
        self.event_url = slugify(self.location_title+str(self.date))
        super(Event, self).save(*args, **kwargs)

鉴于__str__的输出总是将成为event_url +其他一些东西(可能是你的),我可以使用以下内容:

stuff_in_order = Event.objects.filter(#yourqueryhere).order_by('event_url').order_by('date')

这与在模板中修改 str 方法以订购机箱'具有相同的效果。 (sp?)

如果您确实需要在模板中重新排序,则可以使用regroup

{% regroup chassis by dealer as dealer_list %}