1

我正在尝试使用 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:需要多个值来解包。代码行似乎造成错误的是email.send()

这个错误是什么意思?为什么我会得到它?我应该如何解决它?有没有更好的方法从指定组的所有用户中获取电子邮件地址?

谢谢。

4

2 回答 2

2

您想flat=Truevalues_list查询中使用。

从文档:

这类似于 values() ,只是它不是返回字典,而是在迭代时返回元组。

如果只传入单个字段,也可以传入 flat 参数。如果为 True,这将意味着返回的结果是单个值,而不是一个元组。

https://docs.djangoproject.com/en/dev/ref/models/querysets/#values-list

因此,您的地址不是地址列表,而是返回地址元组的迭代器,这不是 EmailMessage 所期望的。

于 2013-06-21T20:23:52.767 回答
1

找到了解决方案。其实很简单。

addresses = User.objects.filter(group__group='Operations').values_list('email', flat=True)
于 2013-06-21T20:23:44.793 回答