【问题标题】:Dynamic Filtering in Django with default Queryset使用默认查询集在 Django 中进行动态过滤
【发布时间】:2016-08-13 17:47:37
【问题描述】:

我已阅读此问题中的出色解释 Dynamically filter ListView CBV in Django 1.7。

但我不想在查询集上获得额外的帮助。

# urls.py
    urlpatterns = patterns('',
        url(r'^(?P<exp>[ASG])$', \
          ScholarshipDirectoryView.as_view(),\
          name='scholarship_directory'),)

# views.py
class ScholarshipDirectoryView(ListView):
    queryset= Scholarship.objects.all()
    model = Scholarship
    template_name = 'scholarship-directory.html'

    def get_queryset(self):
        qs = super(ScholarshipDirectoryView, self).get_queryset()
        return qs.filter(experience_level__exact=self.kwargs['exp'])

如果 url 中缺少“exp”参数,回退到标准查询集的 DRY 方法是什么?

我想采用这种方法,因为我认为为完整的 Queryset 和 Custom/Filtered Queryset 做额外的视图或额外的 urlpattern 没有意义。

【问题讨论】:

    标签: python django listview


    【解决方案1】:

    只需将其包装在 if 中即可。

        qs = super(ScholarshipDirectoryView, self).get_queryset()
        exp =  self.kwargs['exp']
        if exp:
            qs = qs.filter(experience_level__exact=exp)
        # return the new or the old queryset.
        return qs
    

    【讨论】:

    • 重复了什么?
    • 你是对的。没有任何事情被重复。虽然我没有让它工作。它返回完整的 qs。
    • 我忘了补充一点,如果过滤器没有返回任何对象,那么它应该回退到原来的 qs。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 2019-04-03
    • 2013-03-16
    • 1970-01-01
    • 2015-06-20
    • 2021-07-19
    相关资源
    最近更新 更多