ValueError:解压缩需要多于1个值,django电子邮件错误

时间:2013-06-21 20:13:43

标签: python django django-email

我正在尝试使用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()

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

感谢。

2 个答案:

答案 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)