首页 > 解决方案 > 如何在 Django 中按用户类型过滤选择字段?

问题描述

我创建了一个客户User模型,并且我有另一个模型Enquiry。在Enquiry模型中有一个与自定义User模型相关的服务字段。我希望按用户类型过滤现场服务。我希望服务字段仅向我显示员工用户选择。

这是我的models.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

标签: pythonpython-3.xdjangodjango-models

解决方案


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

Enquiry.objects.filter(service__is_staff=True)

参考链接:

https://docs.djangoproject.com/en/3.0/topics/db/queries/#lookups-that-span-relationships


推荐阅读