ListView 下使用 get_queryset() 方法,为什么模型类的所有方法都不可用了?

来源:8-8 ListView开发所有问题页

幕布斯3520075

2021-11-21

老师你好:

我在 ListView 下使用 get_queryset() 方法,为什么模型类的所有方法都不可用了?
模型类的字段全部都是可以调用的。

class QuestionListView(ListView):
    """ Question list page view """
    model = QuestionModel
    paginate_by = 100
    context_object_name = 'question_list'
    template_name = 'question/list.html'

    def get_queryset(self):
        super_queryset = super(QuestionListView, self).get_queryset()
        queryset = super_queryset.filter(status=QuestionModel.OPEN).values('title', 'viewed', 'slug', 'updated_at') \
            .order_by('-updated_at')
        return queryset
写回答

2回答

幕布斯3520075

提问者

2021-11-21

类似:

    

get_absolute_url
total_votes
get_answers
count_answers

模型类的方法都调用不出来,字段可以正常显示。

1
2
幕布斯3520075
回复
Jack
您好,老师: 就是模型类的所有方法,在模板中不显示,也不报任何错误,但是上面 values 中的 字段可以正常显示。 如果在类视图中不用 "get_queryset" 方法, 则一切正常。
2021-11-22
共2条回复

Jack

2021-11-23

你想对问题这样过滤

.filter(status=QuestionModel.OPEN).values('title', 'viewed', 'slug', 'updated_at') \            .order_by('-updated_at')

可以在模型类文件的QuestionQuerySets中写一个方法

//img.mukewang.com/szimg/619c85ae09c67b0813041092.jpg

然后重写querysets的时候这样子调用


你的写法中“super_queryset = super(QuestionListView, self).get_queryset()”这里是继承了原始的get_queryset()函数的功能,而不是重写。

0
4
Jack
回复
幕布斯3520075
哦哦,我没想到这一点。赞👍
2021-11-26
共4条回复

Django高级实战 开发企业级问答网站

融合Django高级用法/算法/设计模式/TestCase测试/云计算打造项目

900 学习 · 756 问题

查看课程