gpt4 book ai didi

python - 如何在 Django 条件注释的 then 子句中使用查询集表达式

转载 作者:行者123 更新时间:2023-12-01 08:26:03 25 4
gpt4 key购买 nike

我有两种模型,一种是组织模型,另一种是组织中用户的成员资格和角色

class Organization(models.Model):
name = models.CharField(blank=False,null=False,max_length=100, unique=True)

class Member(models.Model):
user_request = models.ForeignKey('accounts.User',on_delete=models.CASCADE,related_name="member_user_request")
user_second = models.ForeignKey('accounts.User',on_delete=models.CASCADE,blank=True,null=True, related_name="member_user_second")
role = models.ForeignKey(RoleOrganization,on_delete=models.CASCADE, verbose_name=_('Rol'))
status = models.ForeignKey(Status,on_delete=models.CASCADE, verbose_name=_('Status'))
organization = models.ForeignKey(Organization,on_delete=models.CASCADE, verbose_name=_('Organization'))

我尝试使用带有 case 子句的注释,我想通过以下表达式获取组织中用户的角色:

my_organizations = Member.objects.filter(
Q(user_request_id=self.request.user.id, status__name="accepted", type_request__name="request") |
Q(user_second_id=self.request.user.id, status__name="accepted", type_request__name="invitation")
)

Organization.objects.annotate(
rol=Case(
When(id__in=list(my_organizations.values_list('organization_id', flat=True)),
then=Value(my_organizations.get(organization_id=F('id')).role.name)),
default=None, output_field=CharField()
)
)

这里的问题是 then 表达式没有获取主查询集中对象的 id,如果我在 then 中返回 F('id') 表达式将获取主查询集中的 id 值查询集,但我可以使用过滤器或任何带有主对象的某些值的查询集表达式。

有一种方法可以实现这一点。PS:为了简洁起见,我只是将部分代码放在这里,但如果您需要了解更多信息,请告诉我

最佳答案

我认为你可以使用Subquery这样做:

from django.db.models import OuterRef, Subquery

members = Member.objects.filter(
Q(user_request_id=self.request.user.id, status__name="accepted", type_request__name="request") |
Q(user_second_id=self.request.user.id, status__name="accepted", type_request__name="invitation")
)

member_subquery = members.filter(organization=OuterRef('pk'))

organizations = Organization.objects.annotate(member_role=Subquery(member_subquery.values('role')[:1]))

print(organizations.values('member_role'))

关于python - 如何在 Django 条件注释的 then 子句中使用查询集表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54246735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com