Лучший способ получения связанного объекта в отношениях "многие ко многим" (Self Refrencing ManyToMany Relationship)?

Я работаю над небольшим приложением, содержащим модели CustomUser и PollQuestion. CustomUser имеет отношение ManyToMany между собой, а CustomUser может иметь несколько PollsQuestion, поэтому между ними существует отношение Foreign Key. Аутентифицированный пользователь может видеть только опросы, созданные пользователями, за которыми он следит, чтобы полностью удовлетворить это требование, я написал следующее представление**:-**. На самом деле это не представление, а метод утилиты, возвращающий опросы в исходное представление.

def all_polls_utils(request):
    following = request.user.get_all_followings().values_list("id")
    user_id = [id[0] for id in following]
    all_polls = PollQuestion.objects.none()
    for u_id in user_id:
        user = CustomUser.objects.get(id=u_id)
        polls = user.poll_questions.all()
        all_polls = all_polls | polls
    return all_polls

Главный вопрос:- Есть ли лучший способ сделать то же самое? Любое предложение будет высоко оценено

Я размещаю модели ниже:-

from django.db import models
from django.contrib.auth.models import AbstractUser


# Create your models here.
class CustomUser(AbstractUser):
    email = models.EmailField(max_length=250, null=False)
    name = models.CharField(max_length=50, null=False)
    username = models.CharField(max_length=50, null=False, unique=True)
    password = models.CharField(max_length=15, null=False)
    user = models.ManyToManyField('self', through='Relationship', symmetrical=False, related_name='related_to')

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['name', 'email']

    def get_all_polls(self):
        pass

    def create_relationship(self, person):
        status, obj = Relationship.objects.get_or_create(
            to_person=person,
            from_person=self,
        )
        return status

    def remove_relationship(self, person):
        Relationship.objects.filter(
            from_person=self,
            to_person=person
        ).delete()
        return 'dummy_value'

    def get_all_followings(self):
        return self.user.all()


class Relationship(models.Model):
    from_person = models.ForeignKey(CustomUser, related_name='from_people', on_delete=models.CASCADE)
    to_person = models.ForeignKey(CustomUser, related_name='to_person', on_delete=models.CASCADE)

И Опрос: -

class PollQuestion(models.Model):
    user = models.ForeignKey(CustomUser, null=True, on_delete=models.CASCADE, related_name="poll_questions")
   # Other fields

Note:- Вы также можете предложить мне лучшее название для этого поста?

Заранее спасибо, Надеюсь получить от вас ответ в ближайшее время.

Просто

def all_polls_utils(request):
    all_polls_by_followed = PollQuestion.objects.filter(
        user__in=request.user.get_all_followings()
    )

В качестве отступления, вам, вероятно, следует переименовать user many-to-many в CustomUser, например, в followed_users (с соответствующим именем followers).

Вернуться на верх