2017-02-22 51 views
0

У меня есть проект, где одна из моделей - «Шасси». Я хочу сортировать эти шасси в шаблонах django по значению, возвращаемому __str__. Если я напишу |dictsort:"__str__", он сработает. Я в настоящее время обойти это, написав функцию getIP, которая возвращает то же самое, что и __str__ и минует |dictsort:"getIP".Django Dictsort от __str__

Есть ли способ сделать это без простого переписывания одного и того же кода в другой функции?

ответ

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') 

Это будет иметь тот же эффект, как munging метод ул в шаблоне, чтобы заказать шасси. (sp?)

Если вам действительно нужно изменить порядок в шаблоне, вы можете использовать regroup.

{% regroup chassis by dealer as dealer_list %} 

 Смежные вопросы

  • Нет связанных вопросов^_^