Let these models:
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)
this view:
def main_page(request):
words = Word.objects.all()
categories = Category.objects.all()
return render(request, "main_page.html", {'words': words})
and this template:
{% for category in categories %}
{% for word in category.word_set.all %}
<p>{{ word }}</p>
{% endfor %}
{% endfor %}
I'd like to sort words in template by number of votes and by pub date, separately. How can I do this?
You can make custom template tag or filter, which gets words set and sorting type as parameters.
For example (haven't tested):
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 %}
...
You can do it in the views
words = Word.objects.all().order_by('votes', 'pub_date')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With