如何在Django中根据用户类型筛选选择字段



我创建了一个客户User模型,我有另一个模型Enquiry。在Enquiry模型中,存在一个与自定义User模型相关的服务字段。我希望按用户类型筛选字段服务。我希望服务领域将只向我展示员工用户的选择。

这是我的型号.py:

class User(AbstractBaseUser, PermissionsMixin):
username = models.CharField(max_length=254,unique=True)
name = models.CharField(max_length=254, null=True)
email = models.EmailField(max_length=254, null=True) 
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_Customer = models.BooleanField(default=False)
is_Service_Provider = models.BooleanField(default=False)

last_login = models.DateTimeField(null=True, blank=True)
date_joined = models.DateTimeField(auto_now_add=True)

USERNAME_FIELD = 'username'
EMAIL_FIELD = 'email'
REQUIRED_FIELDS = []
objects = UserManager()
def get_absolute_url(self):
return "/users/%i/" % (self.pk)
def get_username(self):
return self.username

class Enquiry(models.Model):
name = models.CharField(max_length=254 , null=False)
email = models.EmailField(max_length=254, null=False)
phone_no = models.IntegerField(null=False)
service_requied = models.ForeignKey('accounts.Category', on_delete=models.CASCADE, null=False)
subcategory = models.ForeignKey('accounts.SubCategory', on_delete=models.CASCADE, null=False)
country = models.ForeignKey('accounts.Country', on_delete=models.CASCADE, null=False)
state =models.ForeignKey('accounts.State', on_delete=models.CASCADE, null=False)
city = models.ForeignKey('accounts.City', on_delete=models.CASCADE, null=False)
address = models.CharField(max_length=254, null=False)
defects = models.TextField(max_length=254, null=False)
service = models.ForeignKey('accounts.User', on_delete=models.CASCADE, null=False)
def __str__(self):
return self.service.username

外键关系过滤使用双下划线。这可能有效:

Enquiry.objects.filter(service__is_staff=True)

参考链接:

https://docs.djangoproject.com/en/3.0/topics/db/queries/#lookups-跨越关系

from django.db.models import Subquery
staff_users = User.objects.filter(is_staff=True)   
Enquiry.objects.filter(service_id__in=
Subquery(staff_users.values('id')))

最新更新