我的IDE(PyCharm)不断报告:基于函数的通用视图已被弃用。
我的导入列表中有以下语句:
from django.views.generic.list_detail import object_list
我的观点如下:
def category(request, id, slug=None):
category = Category.objects.get(pk=id)
books = Book.objects.filter(
Q(status = 1) & Q(category=category)
).order_by('-id')
s = Poet.objects.order_by('?')[:3]
return object_list(
request,
template_name = 'books/categories/show.html',
queryset = books,
paginate_by = 99,
extra_context = {
'category': category,
'suggestions': s,
'bucket_name': config.BOOKS_BUCKET_NAME,
}
)
我在SO中找到this,但在这方面文档看起来过于复杂。
有关如何转换代码的任何提示都将不胜感激。
答案 0 :(得分:2)
你可以试试这样的事情
from django.views.generic import ListView
class CategoryView(ListView):
template_name = 'books/categories/show.html'
paginate_by = 99
def get_queryset(self):
self.category = Category.objects.get(pk=self.kwargs['id'])
books = Book.objects.filter(
Q(status = 1) & Q(category=self.category)
).order_by('-id')
self.s = Poet.objects.order_by('?')[:3]
return books
def get_context_data(self, **kwargs):
context = super(CategoryView, self).get_context_data(**kwargs)
context['category'] = self.category
context['suggestions'] = self.s
return context
此代码未经过测试,请向您报告是否适合您。 请注意,书籍列表将通过上下文变量“object_list”提供,如果您想为其指定不同的名称,则可以使用“context_object_name”类成员:
class CategoryView(ListView):
template_name = 'books/categories/show.html'
context_object_name = 'books'
...
并在您的urls.py中使用基于类的视图的as_view()方法
url( r'your pattern', CategoryView.as_view(), name='whatever')