2017-02-22 1 views
0

Ich habe ein Projekt, bei dem eines der Modelle "Chassis" ist. Ich möchte diese Chassis in Django-Vorlagen nach dem von __str__ zurückgegebenen Wert sortieren. Wenn ich |dictsort:"__str__" schreibe, stürzt es ab. Ich bin gerade dabei, dies zu umgehen, indem ich eine Funktion getIP schreibe, die das gleiche wie __str__ zurückgibt und |dictsort:"getIP" übergibt.Django Dictsort von __str__

Gibt es eine Möglichkeit, dies zu tun, ohne einfach den gleichen Code in einer anderen Funktion neu zu schreiben?

Antwort

1

Warum sortieren wir das in der Vorlage? Bestellen Sie in der Ansicht, bevor Sie sie übergeben - versuchen Sie in der Regel, die Geschäftslogik aus den Vorlagen herauszuhalten, wo dies möglich ist, und dies klingt sehr nach Geschäftslogik.

Als Beispiel eines meiner Modelle:

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) 

die Ausgabe von __str__ hier gegeben wird, immer die event_url sein + einige andere Sachen (wie bei Ihnen sein wird, vermutlich), ich etwas verwenden könnte entlang der Linien von:

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

Dies hat die gleiche Wirkung wie munging die str Methode in Ihrer Vorlage Ihre Chassis' zu bestellen. (sp?)

Wenn Sie wirklich in der Vorlage neu ordnen müssen, dann könnten Sie regroup verwenden.

{% regroup chassis by dealer as dealer_list %} 
Verwandte Themen