Django中关于drf自定义过滤器中如果需要过滤的字段为外键的处理方式
import django_filters
from publicModels.models import Staff
class StaffFilter(django_filters.FilterSet):
username = django_filters.CharFilter(lookup_expr='icontains',field_name="username")
password = django_filters.CharFilter(lookup_expr='icontains', field_name="password")
staffStatus=django_filters.CharFilter(lookup_expr='icontains', field_name="staffStatus")
email=django_filters.CharFilter(lookup_expr='icontains', field_name="email")
phoneNumber = django_filters.CharFilter(lookup_expr='icontains', field_name="phoneNumber")
role = django_filters.CharFilter(lookup_expr='icontains', field_name="role_id__id")
class Meta:
model = Staff
fields = ("username","password","staffStatus","email","phoneNumber","role")
# 员工表2
class Staff(models.Model):
# uid = models.IntegerField(primary_key=True, verbose_name="员工唯一标识", null=False) # 系统会自动生成唯一的一个uid
uid = models.AutoField(primary_key=True, null=False)
username = models.CharField(verbose_name="员工姓名", max_length=40, null=False, unique=True)
password = models.CharField(verbose_name="密码", max_length=200, null=False)
department = models.ForeignKey(to="Department", on_delete=models.SET_NULL, max_length=80, null=True)
role = models.ForeignKey(to="Role", verbose_name="角色", max_length=40, on_delete=models.SET_NULL, null=True)
createTime = models.DateTimeField(verbose_name="最后修改时间", auto_now=True)
staffStatus = models.IntegerField(verbose_name="在职状态", choices=((0, "非在职状态"), (1, "在职状态")),
help_text="0为非在职,1为在职状态", default=1, null=False)
email = models.EmailField(verbose_name="邮箱", max_length=30, null=False)
phoneNumber = models.CharField(verbose_name="手机号", max_length=20, null=False)
deleted_state = models.CharField(verbose_name='删除状态', max_length=10, choices=(('1', 'existence'), ('0', 'delete')),
null=False, default='1', help_text="1代表存在,0代表删除", db_index=True)
class Meta:
db_table = '员工信息表'
app_label = 'publicModels'
verbose_name_plural = "员工表"
def __str__(self):
return self.username
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
self.password = make_password(self.password)
super().save(force_insert=False, force_update=False, using=None, update_fields=None)
在自定义的过滤器中field_name="role_id__id",用两个_后面接着关联表的字段
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?