我使用基于类的泛型视图Listview
列出所有对象。
我的观点.py:
class PostsList(ListView):
model = Post
template_name = "index.html"
我的url.py:
urlpatterns = [
url(r'^$',PostsList.as_view(), name = "home"),
]
这给了我一个所有帖子的列表。现在我想根据Post
模型的某些字段(比如price
)筛选/排序文章。我需要自己写吗?如果是,我要重写PostsLists
类的哪个方法?def get
,def get_context
?
我看到Listview的get方法定义如下。在它中,我可以直接以**kwargs
的形式传递URL查询参数,或者我必须在类中覆盖下面的方法。
def get(self, request, *args, **kwargs):
....
使用Django的基于类的视图时,如果可能,请避免重写
get()
或post()
。这些方法做了很多工作,如果重写它们,可能需要复制很多内置功能。通常有更具体的方法可以重写。在您的例子中,可以使用
get_queryset
方法动态过滤queryset。您可以使用self.request.GET
访问GET参数。例如:如果url捕获参数,则可以使用
self.args
(位置)和self.kwargs
(基于名称)访问它们。有关详细信息,请参阅dynamic filtering上的文档。
您可以重写get-queryset方法:
保留在url kwargs中可以获得的所有参数的映射。
相关问题 更多 >
编程相关推荐