我正在尝试使用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()
。
这个错误是什么意思?为什么我会得到它?我该怎么解决它呢?有没有更好的方法从指定组的所有用户中获取电子邮件地址?
谢谢。
发布于 2013-06-21 20:23:45
找到了解决方案。实际上,非常简单。
addresses = User.objects.filter(group__group='Operations').values_list('email', flat=True)
发布于 2013-06-21 20:23:53
您希望在values_list
查询中使用flat=True
。
从文档中:
values类似于
(),不同之处在于它不是返回字典,而是在迭代时返回元组。
如果只传入一个字段,也可以传入flat参数。如果为True,这将意味着返回的结果是单值,而不是一元组。
https://docs.djangoproject.com/en/dev/ref/models/querysets/#values-list
因此,您的地址不是地址列表,而是一个返回地址元组的迭代器,这不是EmailMessage所期望的。
https://stackoverflow.com/questions/17243574
复制相似问题