我正在尝试使用django同时向一群人发送电子邮件(虽然现在,我正试图让它只与一个人一起工作)。我有一个名为User
的类,它有一个字段email
和一个名为Group
的类的外键。现在,我正在尝试向特定组中的所有用户发送电子邮件。为此,我有以下代码:
addresses = User.objects.filter(group__group='Operations').values_list('email')
这是正确获取电子邮件地址(如果我打印addresses
我得到[(u'address@example.com',)]
。然后我使用addresses
创建电子邮件:
email = EmailMessage('Test',
get_template('test.html').render(Context({'content': 'This is a TEST!'})),
to = addresses)
当我之前这样做时,手动将电子邮件地址传递给“to”参数,它工作得很好,但现在它给了我标题中的错误:“ValueError:需要多于1个值才能解压缩。”似乎创建错误的代码行是email.send()
。
这个错误是什么意思?我为什么要这样做?我该如何解决?有没有更好的方法从指定组的所有用户中获取电子邮件地址?
感谢。
答案 0 :(得分:2)
您想在flat=True
查询中使用values_list
。
来自文档:
这与values()类似,不同之处在于它不是返回字典,而是在迭代时返回元组。
如果只传入一个字段,也可以传入flat参数。如果为True,则表示返回的结果是单个值,而不是一个元组。
https://docs.djangoproject.com/en/dev/ref/models/querysets/#values-list
因此,您的地址不是地址列表,而是一个返回地址元组的迭代器,这不是EmailMessage所期望的。
答案 1 :(得分:1)
找到解决方案。实际上非常简单。
addresses = User.objects.filter(group__group='Operations').values_list('email', flat=True)