gpt4 book ai didi

django - 如何使用 django orm 让所有收件人收到一条消息?

转载 作者:行者123 更新时间:2023-12-03 17:02:25 25 4
gpt4 key购买 nike

我正在为无法转换为 django orm 的复杂查询而苦苦挣扎。

我正在发送消息。每条消息都可以发送给收件人和/或收件人组。我需要获取给定消息的所有收件人的列表,并且我不希望列表中有任何重复项(同一用户可以在不同的组中)。

到目前为止,这是我的模型:

class Contact(models.Model):
email = models.EmailField(_('Email'), null=True, blank=True)
groups = models.ManyToManyField('Group', related_name='members', null=True,
blank=True, verbose_name=_('Groups'))

class Group(models.Model):
name = models.CharField(_('Name'), max_length=50)


class Message(models.Model):
body = models.TextField(_('Body'))
recipients = models.ManyToManyField('contacts.Contact',
null=True, blank=True,
related_name='messages',
verbose_name=_('Recipients'))
groups = models.ManyToManyField('contacts.Group',
null=True, blank=True,
related_name='messages',
verbose_name=_('Groups'))

你能想出一个聪明的方法来做到这一点吗?

谢谢。

最佳答案

使用Q objects这样您就可以选择作为组的一部分发送消息的联系人和作为同一查询集中的个人收件人的联系人。

然后使用distinct()这样你就不会重复。

如果您不熟悉双下划线符号(例如 groups__messages),请参阅 following relationships "backward" 上的文档.

综合起来,你有:

message = message.objects.get(id=message_id)
Contact.objects.filter(Q(groups__messages=message)|Q(messages=message)).distinct()

您可能希望将上述查询封装在 Message 模型的一个方法中:

class Message(models.Model):
# field definitions

def get_recipients(self):
return Contact.objects.filter(Q(groups__messages=message)|Q(messages=message)).distinct()

然后在您的 View 中,您可以简单地编写 message.get_recipients()

关于django - 如何使用 django orm 让所有收件人收到一条消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11051708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com