Django rest框架过滤器不适用于外键

问题描述

我正在关注django-filters的官方文档:https://django-filter.readthedocs.io/en/stable/guide/rest_framework.html#adding-a-filterset-with-filterset-class

我已经设置了volume,具有ForeignKey关系filter-volume。我想使用volumemin_volume获得max_volume的过滤器,但是每次执行过滤器时,我都会得到错误的数据。

如果有人能弄清楚我做错了什么地方,那就太好了。

models.py:

class Cuboid(models.Model):
    title = models.CharField(max_length=80)
    volume = models.ForeignKey('FilterVolume',on_delete=models.CASCADE)

    def __str__(self):
        return self.title

class FilterVolume(models.Model):
    volume = models.IntegerField(max_length=30)

    def __unicode__(self):
        return self.volume

filters.py

from django_filters import rest_framework as filters
from crud_api.models import Cuboid

class CuboidFilter(filters.FilterSet):
    min_volume = filters.NumberFilter(field_name="volume",lookup_expr='gte')
    max_volume = filters.NumberFilter(field_name="volume",lookup_expr='lte')

    class Meta:
        model = Cuboid
        fields = [
            'min_volume','max_volume'
        ]

views.py

class CuboidListApiView(generics.ListAPIView):
    model = Cuboid
    queryset = Cuboid.objects.all()
    serializer_class = CuboidSerializer
    filterset_class = CuboidFilter

Foreign key error

解决方法

field_name 更改为 volume__volume 而不是volume

class CuboidFilter(filters.FilterSet):
    min_volume = filters.NumberFilter(field_name="volume__volume",lookup_expr='gte')
    max_volume = filters.NumberFilter(field_name="volume__volume",lookup_expr='lte')

    class Meta:
        model = Cuboid
        fields = ['min_volume','max_volume']

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...