django - 从过滤器中的视图更改查询集
问题描述
我希望有默认行为,其中视图中的查询集返回发布日期小于某个日期的记录。我还想要一个布尔 DRF 过滤器,如果设置为 true,则无论 publish_at 日期是什么,它都会返回所有记录。
视图.py:
queryset = ProjectNews.objects.exclude(publish_at__gte=timezone.now())
过滤器.py:
from django_filters import rest_framework as filters
class ProjectNewsFilterSet(filters.FilterSet):
not_published = filters.BooleanFilter(
method='show_not_published_news'
)
def show_not_published(self, queryset, name, value):
if value:
# queryset based on queryset from view
# does not return all the records
return queryset.all()
return queryset.exclude(publish_at__gte=timezone.now())
解决方案
只需将查询集更改为:
queryset = ProjectNews.objects.all()
比您在过滤器中过滤查询集。
推荐阅读
- mysql - Elasticsearch 6.5.4 中的 mapper_parsing_exception
- php - 如何在请求数组中插入静态字段(Laravel 5.7)
- ios - 无法使用“(Int?)”类型的参数列表调用“String”类型的初始化程序
- azure - 发布 SonarQube 问题的质量
- bash - bash 测试以查看脚本是否在具有别名的某个目录中运行并且不使用字符串匹配
- python - 如何使用自定义 tf.Estimator 在张量板事件文件中仅创建一份图形副本?
- python-3.x - 为什么变量 line1 和 line2 不写入文件 'USERDATA.py'?
- c# - 如何在列C#中仅添加数字
- solidity - solidity abi.encodeWithSignature 不适用于 diffienet 参数
- oracle - 以矢量化方式更新 oracle 中的列