如何查询和附加与其他模型的多对多关系链接的用户电子邮件列表

How to query and append a list of users emails linked with a manytomany relation to other Model

首先请看一下数据结构。 共有三种型号

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)

当前报价对象有 3 个合作伙伴,共有 4 个用户链接到这些合作伙伴,那么 recipient_list 中应该有 4 个电子邮件,但是这返回空数组 []。请突出显示我做错了什么以及如何解决它。

您可以 .filter(…) [Django-doc] 使用:

CustomUser.objects.filter(<b>groups__partner__quote_partners__id=<i>id</i></b>)

这将查找链接到 GroupCustomUser 链接到 Partner 链接到 Quoteid

您可以查询:

CustomUser.objects.filter(<b>partner__quote_partners__id=<i>id</i></b>)

查找具有相关 Partner 且具有相关 Quoteid 作为主键的 CustomUser