我有一个类似的模型,可以收集用户在书籍上选择的内容。
因此,每条记录都有user_id,like_id和book_id。
我想要一个类似的网址:
(?P<top_num>\d+)/likes/
将被引导到一个类似这样的视图:
class TopLikes(ListView):
""" Get all the archived projects """
queryset = Like.objects.filter(display=True)
template_name = "books/TopLikes.html"
paginate_by = 10
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(TopLikes, self).dispatch(*args, **kwargs)
我不知道的是如何将top_num
作为传递给视图的数字,以返回最喜欢的前十本书。
我可以做queryset = Like.objects.filter(display=True).annotate(num_books=Count('books')).order_by('num_books')
对我来说,获取喜欢然后使用喜欢在模板中做这样的事情是有道理的:
{% for object in object_list %}
{{ object.book.title }} with {{ object|length }}
{% endfor %}
作为自定义视图,这会更容易吗?
由于
答案 0 :(得分:3)
覆盖get_queryset()方法,以便您可以添加自定义过滤
使用self.kwargs ,以便您可以使用top_num url参数来限制查询集
使用{{object.num_books}} ,因为无论如何{{object | length}}应该做什么:)
示例:
class TopLikes(ListView):
""" Get all the archived projects """
queryset = Like.objects.filter(display=True)
template_name = "books/TopLikes.html"
paginate_by = 10
def get_queryset(self):
qs = super(TopLikes, self).get_queryset()
qs = qs.annotate(num_books=Count('books')).order_by('num_books')
qs = qs[:self.kwargs['top_num']]
return qs