Как добавить список писем пользователей, связанных отношением manytomany с другой моделью
Сначала, пожалуйста, посмотрите на структуру данных. есть три модели
class Partner(models.Model):
name = models.CharField(max_length=100, blank=True, null=True)
group = models.OneToOneField(
Group, on_delete=models.DO_NOTHING, blank=True, null=True)
class CustomUser(AbstractUser):
email = models.EmailField(_('email address'), unique=True)
partner = models.ManyToManyField(
Partner, blank=True)
class Quote(models.Model):
partner = models.ManyToManyField(
Partner, blank=True, related_name='quote_partners')
В партнерском поле Quote и CustomUser может быть несколько партнеров. Я хочу составить список пользователей электронной почты, которые связаны с партнером внутри поля партнера, установленного в модели цитаты. Вот как я это делаю;
quote = Quote.objects.get(id=id)
partners = quote.partner.all()
for partner in partners:
recipient_list = []
for user in CustomUser.objects.filter(groups__partner=partner):
recipient_list.append(user.email)
В настоящее время объект quote имеет 3 партнеров и коллективно 4 пользователей, связанных с этими партнерами, тогда должно быть 4 электронных письма в recipient_list, Но это возвращает пустой массив []. Пожалуйста, укажите, что я делаю неправильно и как это исправить.
Вы можете .filter(…) [Django-doc] с:
CustomUser.objects.filter(groups__partner__quote_partners__id=id)
Это ищет CustomUser, связанные с Group, связанные с , связанные с Partner, связанные с Quote с заданным id.
Вы можете сделать запрос с помощью:
CustomUser.objects.filter(partner__quote_partners__id=id)
Для поиска CustomUser, которые имеют связанные Partner, которые имеют связанные Quote с id в качестве первичного ключа.