我有一个项目,其中一个型号是“Chassis”。我想通过__str__
返回的值在django模板中对这些机箱进行排序。如果我写|dictsort:"__str__"
它会崩溃。我目前正在编写一个函数getIP
,它返回与__str__
相同的内容并传递|dictsort:"getIP"
。
有没有办法做到这一点,而不是简单地在不同的函数中重写完全相同的代码?
答案 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 %}