如何解决如何在 django-filter 中使用 DateTimeFilter,向它传递一个自定义的“方法”参数?
我正在尝试调用这样配置的端点:
https://www.nottherealurl.com/foods?transaction_datetime=2020-01-01,2020-01-30
我正在尝试过滤在开始日期和结束日期之间的给定时间内售出的食物。在这种情况下,在 2020-01-01 和 2020-01-30 之间。
我有一个名为 Food 的模型,它有一个名为 transaction_datetime
的字段。
class Food(CustomMixin):
... other fields ...
food_type = models.CharField(
max_length=25,null=True,blank=True,choices=FOOD_TYPE_CHOICES,)
transaction_datetime = models.DateTimeField(
null=False,editable=False,)
... other fields ...
class FoodView(ListAPIView):
serializer_class = FoodSerializer
filter_backends = (
filters.OrderingFilter,filters.SearchFilter,filters.DjangoFilterBackend
)
filter_class = FoodFilter
ordering_fields = (
'name','amount','transaction_datetime','=food_uuid',)
ordering = ('-transaction_datetime',)
search_fields = ordering_fields
def get_queryset(self):
return (
Food.objects.prefetch_related('ingredients').filter(deleted_at__isnull=True)
FoodFilter
是这样配置的。
class FoodFilter(django_filters.FilterSet):
food_type = django_filters.CharFilter(method='filter_by_food_type')
transaction_datetime = django_filters.DateTimeFilter(method='filter_by_transaction_datetime')
def filter_by_food_type(self,queryset,name,value):
print("RAN") # printed when I call the appropriate endpoint as stated below
value_list = [x.strip() for x in value.split(',')]
return queryset.filter(
food_type__in=value_list
)
def filter_by_transaction_datetime(self,value):
print("HELLLOOOO") # this does not show up at all when attempt to call endpoint to filter by transaction_datetime
value_list = [x.strip() for x in value.split(',')]
start_date = value_list[0]
end_date = value_list[1]
return queryset.filter(transaction_datetime__range=[start_date,end_date])
class Meta:
model = Food
fields = {
'cooking_state': ['exact'],}
我可以使用以下端点,并且确定查询集是使用 filter_by_food_type
方法过滤的。
与 filter_by_food_type
一起使用的端点网址:
https://www.nottherealurl.com/foods?food_type=vegan,vegetarian
但我无法运行此 url 以通过 transaction_datetime
过滤我的查询集:
ottherealurl.com/foods?transaction_datetime=2020-01-01,2020-01-30
我想知道这是不是因为 DateTimeFilter
不接受 method
作为 kwarg?但我很确定它确实如此,因为 DateTimeFilter
extends Filter
不是吗?谁能告诉我我做错了什么并提出解决方案/修复建议?谢谢:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。