2017-02-22 8 views
0

モデルの1つが「シャーシ」であるプロジェクトがあります。私は__str__によって返された値によって、これらのシャージンをdjangoテンプレートでソートしたいと思います。私が|dictsort:"__str__"と書くとクラッシュします。私は現在、__str__と同じものを返し、|dictsort:"getIP"を渡す関数getIPを書くことによってこれを回避しています。Django Dictsort by __str__

別の機能でまったく同じコードを単純に書き換えることなくこれを行う方法はありますか?

答えて

1

なぜテンプレートでそれを並べ替えるのですか?あなたがそれを渡す前にビュー内で注文する - 一般的に、可能な限りテンプレートからビジネスロジックを取り除いてください。これはビジネスロジックとよく似ています。一例として、

、私のモデルの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 %}