Django中關於drf自定義過濾器中如果需要過濾的欄位為外來鍵的處理方式
阿新 • • 發佈:2022-03-11
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",用兩個_後面接著關聯表的欄位