gpt4 book ai didi

python - 在带有 django-rest-framework 的过滤器中使用自定义方法

转载 作者:太空狗 更新时间:2023-10-29 18:25:38 24 4
gpt4 key购买 nike

我想在我的 REST API 中过滤查询参数 - see django docs on this .但是,我希望过滤的一个参数只能通过模型​​@property 获得

示例模型.py:

class Listing(models.Model):
product = models.OneToOneField(Product, related_name='listing')
...
@property
def category(self):
return self.product.assets[0].category.name

这是根据 django-filter docs 为我的列表 API 设置的

    class ListingFilter(django_filters.FilterSet):
product = django_filters.CharFilter(name='product__name')
category = django_filters.CharFilter(name='category') #DOES NOT WORK!!

class Meta:
model = Listing
fields = ['product','category']

class ListingList(generics.ListCreateAPIView):
queryset = Listing.objects.all()
serializer_class = ListingSerializer
filter_class = ListingFilter

如何按 listing.category 进行适当过滤?它不能直接在列表模型上使用。

最佳答案

使用“action”参数指定自定义方法 - see django-filter docs

首先定义一个使用类别参数值过滤查询集的方法:

    def filter_category(queryset, value):
if not value:
return queryset

queryset = ...custom filtering on queryset using 'value'...
return queryset

列表过滤器应如下所示:

    class ListingFilter(django_filters.FilterSet):
...
category = django_filters.CharFilter(action=filter_category)
...

关于python - 在带有 django-rest-framework 的过滤器中使用自定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24414926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com