Django ORM - обновить поле ForeignKey с помощью модели ManyToManyField - PullRequest
1 голос
/ 09 марта 2020

У меня есть модель:

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 голосов
/ 09 марта 2020

Попробуйте использовать аннотирование, создайте поле и затем используйте его в операторе обновления.

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'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...