我目前正try 在基于泛型类的视图上使用get_queryset从url参数中过滤日期范围,但在执行日期范围过滤后收到一个空array.这有点奇怪,因为我可以打印查询集,但无法返回它.

URL参数:http://127.0.0.1:8000/budget-filter?budget_date=2023-6-7&budget_end_date=2023-6-13

下面是views.py

@permission_classes([IsAuthenticated])
class BudgetFilter(generics.ListAPIView):

    serializer_class = BudgetSerializer
    paginator = None
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['budget_category', 'budget_account', 'budget_date', 'budget_end_date']

    def get_queryset(self):

        user = self.request.user.username
        budget_date_url = self.request.GET.get('budget_date', None)
        budget_end_date_url = self.request.GET.get('budget_end_date', None)

        if budget_date_url is not None:
            queryset = BudgetModel.objects.filter(current_user = user).filter(budget_date__gte=budget_date_url, budget_date__lte=budget_end_date_url).values()
            print (queryset)
            return queryset

下面是序列化程序.py

class BudgetSerializer(serializers.ModelSerializer):
    class Meta:
        model = BudgetModel
        fields = '__all__'

Models.py

class BudgetModel(models.Model):
    budget_description = models.CharField(max_length=150)
    budget_price = models.DecimalField(max_digits=35, decimal_places=2)
    budget_account = models.CharField(max_length=100)
    budget_category = models.CharField(max_length=100)
    budget_currency = models.CharField(max_length=150)
    budget_date = models.DateField(auto_now=False)
    budget_end_date = models.DateField(auto_now=False, blank=True)
    budget_display_date = models.CharField(max_length=15)
    current_user = models.CharField(max_length=200)

回复:print (queryset)

<QuerySet [{'id': 20, 'budget_description': 'adassd', 'budget_price': Decimal('22.00'), 'budget_account': 'Main', 'budget_category': 'Education', 'budget_currency': 'AED', 'budget_date': datetime.date(2023, 6, 10), 'budget_end_date': datetime.date(2023, 6, 10), 'budget_display_date': '10 Jun 2023', 'current_user': 'myname'}]>

我try 了使用不同的日期范围过滤方法,但是__GTE和__LTE方法似乎起到了作用.现在我可以打印查询集了,但不能从函数返回它.

推荐答案

嗯,我不知道django-filter,但你可以使用简单的custom filterrange查找:

class BudgetFilter(generics.ListAPIView):
    queryset = BudgetModel.objects.all()
    ...

    def filter_queryset(self, queryset):
        user = self.request.user.username
        budget_date_url = self.request.GET.get("budget_date", None)
        budget_end_date_url = self.request.GET.get("budget_end_date", None)

        if budget_date_url is not None:
            queryset = BudgetModel.objects.filter(current_user=user).filter(
                budget_date__range=(budget_date_url, budget_end_date_url)
            )
        return queryset

也许您还想判断这两个参数是否都存在,以便进行筛选!

Django相关问答推荐

新的 Django 开发人员无法在网站上显示Hello World,而不是默认安装成功页面

如何根据状态计算表中数据的数量?

Django 转储数据将附加数据添加到 json 导出

为什么我的搜索功能返回错误相关字段查找无效:​​类别

Django 长时间运行带有线程/处理的异步任务

如何让 Django 在模板更改时重新启动运行服务器?

遍历django模板中的外键相关表

Django ORM,按天分组

为用户添加自定义权限

如何在python中遍历httprequest post变量

使用 Python / Django 的 Google API 示例的 Oauth

django 有条件地过滤对象

django 模板中对象的模型名称

在 docker 容器中创建 django 超级用户而不输入密码

django 管理列表中的外键显示

django admin 排序外键字段列表

Django - 一起为 2 个或更多字段创建唯一的数据库约束

如何在字段集中显示 Django 管理内联模型?

Django:以 10 为底的 int() 的无效文字

从 git 存储库中删除并忽略所有具有扩展名的文件