5

これらのモデルをしましょう:

class Category(models.Model):
    name = models.CharField(max_length=20)

class Word(models.Model):
    name = models.CharField(max_length=200)
    votes = models.IntegerField(default=1)
    categories = models.ManyToManyField(Category, null=True, blank=True)

このビュー:

def main_page(request):
    words = Word.objects.all()
    categories = Category.objects.all()
    return render(request, "main_page.html", {'words': words})

そしてこのテンプレート:

{% for category in categories %}
    {% for word in category.word_set.all %}
    <p>{{ word }}</p>
    {% endfor %}
{% endfor %}

テンプレート内の単語を、投票数と発行日で別々に並べ替えたいと思います。これどうやってするの?

4

3 に答える 3

12

カスタムテンプレートタグまたはフィルターを作成できます。これにより、単語セットと並べ替えタイプがパラメーターとして取得されます。

例(テストされていません):

custom_tags.py:

from django import template
register = template.Library()

@register.filter
def sort_by(queryset, order):
    return queryset.order_by(order)

template.html

{% load custom_tags %}
...
{% for word in category.word_set.all|sort_by:'-votes' %}
    <p>{{ word }}</p>
{% endfor %}
...
于 2012-09-02T20:48:24.247 に答える
6

あなたはビューでそれを行うことができます

words = Word.objects.all().order_by('votes', 'pub_date')
于 2012-09-02T19:16:20.683 に答える
0

あなたもすることができます:

  1. カテゴリモデルに特別なメソッドを追加し、
  2. Word用のカスタム関連マネージャーに簡単なショートカットメソッドを追加し、
  3. この順序をWordのデフォルトの順序にします(正直言って、これは好きではありません)
于 2012-09-02T21:16:56.823 に答える