我有一个模特:
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
内部,所以我在这里完全困惑于应如何处理。
尝试使用注释创建一个字段,然后在更新语句中使用。
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'))