如何从多对多关系的属性中获取 Django 查询的值?
How to get values of a django query from attributes of a many to many relation?
我有这两个型号:
class Company(models.Model):
name = models.CharField(max_length=100)
class User(models.Model):
ACCES_TYPE_CHOICES = (
('ADMIN', 'Admin'),
('GUEST', 'Guest')
)
company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name='users')
access_type = models.CharField(max_length=5, choices=ACCES_TYPE_CHOICES)
我想要一个查询,该查询将 return 每个公司的 access_type == GUEST
用户数和 access_type == ADMIN
用户数的值,如下所示:
<QuerySet [{'id': 1, 'name': 'Company name', 'admin_users': 3, 'guest_users': 1}]>
我尝试了一些带有注释的方法,但找不到解决方案。
感谢您的帮助!
您可以使用 filter=…
parameter [Django-doc] in a Count
expression [Django-doc]:
from django.db.models import Count, Q
Company.objects.annotate(
admin_users=Count('users', <b>filter=Q(access_type='ADMIN')</b>),
guest_users=Count('users', <b>filter=Q(access_type='GUEST')</b>)
)
由此产生的Company
对象将有两个额外的属性:.admin_users
和.guest_users
。
我有这两个型号:
class Company(models.Model):
name = models.CharField(max_length=100)
class User(models.Model):
ACCES_TYPE_CHOICES = (
('ADMIN', 'Admin'),
('GUEST', 'Guest')
)
company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name='users')
access_type = models.CharField(max_length=5, choices=ACCES_TYPE_CHOICES)
我想要一个查询,该查询将 return 每个公司的 access_type == GUEST
用户数和 access_type == ADMIN
用户数的值,如下所示:
<QuerySet [{'id': 1, 'name': 'Company name', 'admin_users': 3, 'guest_users': 1}]>
我尝试了一些带有注释的方法,但找不到解决方案。
感谢您的帮助!
您可以使用 filter=…
parameter [Django-doc] in a Count
expression [Django-doc]:
from django.db.models import Count, Q
Company.objects.annotate(
admin_users=Count('users', <b>filter=Q(access_type='ADMIN')</b>),
guest_users=Count('users', <b>filter=Q(access_type='GUEST')</b>)
)
由此产生的Company
对象将有两个额外的属性:.admin_users
和.guest_users
。