You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django使用DjangoFilterBackend时filter_fields如何包含全部模型字段

方案1:直接从模型字段生成filter_fields列表

如果你的视图固定对应Product模型,直接把filter_fields赋值为全字段名列表即可:

filter_fields = [field.name for field in Product._meta.fields]

如果需要排除部分敏感字段,添加过滤条件即可:

filter_fields = [
    field.name for field in Product._meta.fields 
    if field.name not in ['敏感字段1', '敏感字段2']
]

方案2:自定义通用Mixin兼容__all__写法

如果你需要多个视图都支持filter_fields = '__all__'的写法,可以封装通用混入类:

class AllFieldsFilterMixin:
    def get_filter_fields(self):
        # 识别__all__标识,自动生成对应模型的全字段列表
        if self.filter_fields == '__all__':
            return [field.name for field in self.queryset.model._meta.fields]
        return super().get_filter_fields()

之后你的视图类继承这个Mixin,就可以直接写filter_fields = '__all__'正常生效。


方案3:自定义FilterSet使用原生全字段支持

django-filter的FilterSet本身支持fields='__all__'配置,你可以单独定义过滤类:

from django_filters.rest_framework import FilterSet
from .models import Product

class ProductFilter(FilterSet):
    class Meta:
        model = Product
        fields = '__all__'

然后在视图中指定过滤类即可:

filterset_class = ProductFilter

注意:全字段过滤会默认暴露模型所有字段给前端查询,如有敏感字段务必手动排除,避免数据泄露风险。

内容的提问来源于stack exchange,提问作者gammawind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:24:03