Как написать менеджер моделей для модели в django и вернуть результат в формате quryset

У нас есть 3 модели в models.py:

class Benefactor(models.Model):
    user = models.OneToOneField(User , on_delete=models.CASCADE)
    choice = [
        (0,'Beginner'),
        (1,'medium'),
        (2,'Expert'),
    ]
    experience = models.SmallIntegerField(default=0, choices=choice)
    free_time_per_week = models.PositiveSmallIntegerField(default=0)

и

class Charity(models.Model):
    user = models.OneToOneField(User , on_delete=models.CASCADE)
    name = models.CharField(max_length=50)
    reg_number = models.CharField(max_length=10)

и

class Task(models.Model):
   assigned_benefactor = models.ForeignKey(Benefactor , null=True , on_delete=models.CASCADE)
   charity = models.ForeignKey(Charity , on_delete=models.CASCADE)
   age_limit_from = models.IntegerField(blank=True , null=True)
   age_limit_to = models.IntegerField(blank=True ,null=True)
   date = models.DateField(blank=True ,null=True)
   description =models.TextField(blank=True , null=True)
   choices = [
       ('M' , 'Male'),
       ('F' , 'Female'),
   ]
   gender_limit = models.CharField(max_length=1 , choices=choices)
   StateChoices = [
       ('P' ,'Pending'),
       ('W' , 'Waiting'),
       ('A' ,'Assigned'),
       ('D' , 'Done'),
   ]
   state = models.CharField(max_length=1 , choices=StateChoices , default='P')
   title = models.CharField(max_length=60)
   objects =TaskManager()

Мне нужно Написать для модели Task с менеджером моделей Чтобы сделать return quryset of users in benfactor or in charity or state in Task = 'P' but this code dosent work:

class TaskManager(models.Manager):

    def all_related_tasks_to_user(self, user):
        return self.get_queryset.filter(Charity.user = user or Benefactor.user = user or Task.state = 'P')

пожалуйста, помогите мне решить проблему

Вы можете использовать выражение Q и двойное подчеркивание (для перехода в поле другой модели):

def all_related_tasks_to_user(self, user):
        return self.get_queryset.filter(Q(charity__user=user) | Q(assigned_benefactor__user=user) | Q(state='P'))
Вернуться на верх