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",用两个_后面接着关联表的字段

posted @   Jaetyn  阅读(819)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示