使用django过滤器的DRF注释queryset过滤

使用django过滤器的DRF注释queryset过滤,django,django-rest-framework,django-filter,django-annotate,Django,Django Rest Framework,Django Filter,Django Annotate,任何人都可以在DRF中帮助过滤。 我有一些产品型号,比如Product和managerProductManager: class ProductItem(Model): price = DecimalField() class Product(Model): items = ManyToManyField(ProductItem) priceman = ProductManager() class ProductManager(Manager): def ge

任何人都可以在DRF中帮助过滤。 我有一些产品型号,比如
Product
和manager
ProductManager

class ProductItem(Model):
    price = DecimalField()

class Product(Model):
    items = ManyToManyField(ProductItem)
    priceman = ProductManager()

class ProductManager(Manager):
    def get_queryset(self):
        qs = super().get_queryset().annotate(total_price=Sum('items__price'))
    return qs
如果过滤器类别为:

class ProductFilter(django_filters.rest_framework.FilterSet):
    class Meta:
        model = Product
        fields = {
            'total_price': ['lt', 'gt'],
        }
以下是我的看法:

class ProductViewSet(ModelViewSet):
    queryset = Product.priceman.all()
    filterset_class = ProductFilter
我得到了一个错误:

TypeError: 'Meta.fields' contains fields that are not defined on this FilterSet: total_price

我应该如何配置筛选器类来实现这一点?

我找到了答案,可以通过如下更改筛选器类来实现:

class ProductFilter(django_filters.rest_framework.FilterSet):
    min_price = NumberFilter(field_name="total_price", lookup_expr='gt')
    max_price = NumberFilter(field_name="total_price", lookup_expr='lt')
    class Meta:
        model = Product
        fields = ['min_price', 'max_price']