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

时间:2020-03-09 16:04:31

标签: python django django-orm

我有一个模特:

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内,所以在这里我完全不知所措。

1 个答案:

答案 0 :(得分: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'))
相关问题