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 шт):
Решение было найдено
user_obj = User.objects.filter( id__in=Subscription.objects.values('author_id') )
В общем два вложенных запроса, в которых id из модели User береться id и проверяется сразу же, есть ли такие id в запросе из таблицы подписок. Как-то так.