Как написать менеджер моделей для модели в 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'))