我创建了一个客户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')))