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

时间:2020-08-13 04:29:07

标签: python django django-rest-framework foreign-keys

我正在关注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

1 个答案:

答案 0 :(得分:1)

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']