我有一张models.py,看起来像这样

class Product(models.Model):
    name = models.CharField(max_length = 255, unique = True, null = False, blank = False)
    brand = models.ForeignKey(Brand, on_delete = models.SET_NULL, null = True, blank = True, related_name = 'products')

class Brand(models.Model):
    name = models.CharField(max_length = 255, unique = True, null = False, blank = False)

我想过滤基于Brand型号的name字段的产品数据.我的views.py号是这样的

class ProductAPIView(generics.GenericAPIView):

    serializer_class = ProductSerializer
    queryset = Product.objects.all()
    filter_backends = (DjangoFilterBackend,)
    filterset_class = ProductFilter
    
    def get(self, request):
        products = self.filter_queryset(self.get_queryset())
        serializer = self.serializer_class(products, many = True)
        return Response(serializer.data)

我的filters.py是这样的

class ProductFilter(FilterSet):

    class Meta:
        model = Product
        fields = {
            'brand__name' : ['iexact', ]
        }

无论我为brand发送什么查询参数,结果都是整个列表,而不是过滤所需的列表. 我是不是漏掉了什么?提前谢谢你

推荐答案

您应该使用以下方式进行过滤:

?brand__name__iexact=mybrand

但是,创建一个专用字段可能会更好,例如:

from django_filters import CharFilter


class ProductFilter(FilterSet):
    brand = CharFilter(field_name='brand__name', lookup_expr='iexact')

    class Meta:
        model = Product
        fields = {}

然后使用以下选项进行筛选:

?brand=mybrand

Django相关问答推荐

Django Admin中显示的DateField下面的小提示是什么?

Django中的登录重定向

Django和静态文件

试图找出投票的总数,但无法理解它是如何在序列化器中完成的.我是Django的新手,它是如何完成的?

在Django ORM中引用非主外键

如何在 Django 模板视图中显示我的数据?

PyCharm:强制 Django 模板语法突出显示

恢复 Django 1.7 RemoveField 迁移

Django 密码以什么格式存储在数据库中?

有没有办法将变量传递给 Django 中的 extended模板?

Apache + mod_wsgi 与 nginx + gunicorn

如何验证对象是否存在于多线程中

Django - 了解 X-Sendfile

在 Django 中使用邮箱地址或用户名登录用户

Django将HttpResponseRedirect返回到带有参数的url

Django 模型:delete() 未触发

Django中reverse()和reverse_lazy()的区别

Django 多项 Select 字段/复选框 Select 多个

想要在 Django 测试中禁用信号

何时使用 Django get_absolute_url() 方法?