如何在Django filter表单中过滤关联模型的用户first name字段
实现方法
django-filter默认会为外键类型字段自动生成下拉选择框,你只需要手动定义针对关联user表first_name字段的文本过滤器即可,修改后的filters.py代码如下:
import django_filters from django_filters import CharFilter from .models import Profile class ProfileFilter(django_filters.FilterSet): # 自定义姓名搜索过滤器 user_first_name = CharFilter( field_name="user__first_name", # 双下划线跨关联表查询用户的first_name字段 lookup_expr="icontains", # 模糊匹配,不区分大小写,输入部分内容即可命中 label="用户姓名搜索" # 表单输入框的提示文字,可自定义 ) class Meta: model = Profile # 仅保留需要的过滤字段,不要用__all__避免生成多余的user下拉选择框 fields = ["user_first_name", "total_members"] # 其他需要过滤的字段直接追加到列表即可
参数说明
lookup_expr可根据业务需求调整:icontains:模糊匹配,不区分大小写(最常用)contains:模糊匹配,区分大小写exact:完全匹配startswith:匹配内容开头
修改完成后无需调整视图和模板逻辑,原有表单渲染逻辑会自动将该字段渲染为文本输入框,用户直接输入姓名即可完成过滤,不会再生成用户下拉选择框。
内容的提问来源于stack exchange,提问作者Ankit Tiwari
相关产品推荐
相关产品推荐

