Django ORM. Как составить запрос без цикла

Всем привет. Помогите составить правильный запрос к БД в Джанго.

Суть такова, что есть модель:

class Subscription(models.Model):
    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE,
                             related_name='followers')
    author = models.ForeignKey(CustomUser, on_delete=models.CASCADE,
                               related_name='following')

    class Meta:
        constraints = [
            models.UniqueConstraint(fields=['user', 'author'], 
                                    name='subscription_unique'),
        ]
        verbose_name = 'Подписка'
        verbose_name_plural = 'Подписки'

    def __str__(self):
        return f'{self.user} => {self.author}'

Есть view

user_obj = [follow_obj.author for follow_obj in user.followers.all()] 

То есть идет запрос к таблице по related_name, идет выборка тех авторов, на которых подписан текущий пользователь. По полученному списку пробегаем циклом и добавляем в массив объекты-авторов.

Собственно вопрос, как сразу получить список авторов БЕЗ ЦИКЛА?

Я уже 3-й день голову ломаю, не получается решить эту задачу. Помогите, подскажите, как обойтись без цикла?


Ответы (1 шт):

Автор решения: phpstal

Решение было найдено

user_obj = User.objects.filter( id__in=Subscription.objects.values('author_id') )

В общем два вложенных запроса, в которых id из модели User береться id и проверяется сразу же, есть ли такие id в запросе из таблицы подписок. Как-то так.

→ Ссылка