1. 程式人生 > 其它 >Django中關於drf自定義過濾器中如果需要過濾的欄位為外來鍵的處理方式

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",用兩個_後面接著關聯表的欄位