我目前正在尝试使用get_queryset在基于泛型类的视图上从url参数进行日期范围过滤,但是在进行日期范围过滤后,我收到了一个空数组。这有点奇怪,因为我可以打印查询集,但不能返回它。
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
下面是serializers.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'}]>
我尝试使用不同的日期范围过滤方法,然而__gte和__lte方法似乎是一个做的伎俩。现在我可以打印查询集了,只是不能从函数中返回它。
2条答案
按热度按时间uqxowvwt1#
嗯,.values()可能不会返回实际模型示例的信息,这可能会使序列化器失效。尝试删除它并直接获取查询:
8yparm6h2#
好吧,我不知道
django-filter
,但你可以使用一个简单的custom filter
和range
查找:也许你还想检查这两个参数的存在,以便过滤!