Как добавить список писем пользователей, связанных отношением 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 в качестве первичного ключа.

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