Django ORM-用模型的ManyToManyField更新ForeignKey字段

问题描述 投票:0回答:1

我有一个模特:

class User(AbstractUser):
   name = models.CharField(max_length=255)
   organizations = models.ManyToManyField(Organization)
   active_organization = models.ForeignKey(Organization)

现在我想用模型中的active_organization之一更新organizations,所以我想做这样的事情:

User.objects.filter(active_organization=q).update(active_organization=F('organizations__pk')[0]) 

严重F不能下标,我也尝试过,

User.objects.filter(active_organization=q)\
                    .update(active_organization=Subquery(
                    Organization.objects.filter(pk=OuterRef('organizations').all()[0].pk)))

但是在这种情况下,它告诉我OuterRef应该在它所在的SubQuery内部,所以我在这里完全困惑于应如何处理。

python django django-orm
1个回答
0
投票

尝试使用注释创建一个字段,然后在更新语句中使用。

User.objects.filter(active_organization=q).annotate(
    next_active_org_id=Subquery(
        Organization.objects.filter(
            user_set__id=OuterRef('pk')
        ).values('id')[:1]
    )
).update(active_organization=F('next_active_org_id'))
© www.soinside.com 2019 - 2024. All rights reserved.