使用django过滤器的DRF注释queryset过滤
任何人都可以在DRF中帮助过滤。 我有一些产品型号,比如使用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
Product
和managerProductManager
:
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']