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 @ 2022-03-11 14:25  Jaetyn  阅读(851)  评论(0)    收藏  举报