首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ValueError:需要多个值才能解包,django电子邮件错误

ValueError:需要多个值才能解包,django电子邮件错误
EN

Stack Overflow用户
提问于 2013-06-21 20:13:43
回答 2查看 3K关注 0票数 1

我正在尝试使用django同时向一群人发送电子邮件(尽管现在,我正在尝试让它只与一个人一起工作)。我有一个名为User的类,它有一个字段email和一个指向名为Group的类的外键。现在,我正在尝试向特定组中的所有用户发送电子邮件。为此,我有以下代码:

addresses = User.objects.filter(group__group='Operations').values_list('email')

这是正确获取电子邮件地址(如果我打印addresses,我会得到[(u'address@example.com',)]。然后我使用addresses创建一封电子邮件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
email = EmailMessage('Test', 
         get_template('test.html').render(Context({'content': 'This is a TEST!'})),
         to = addresses) 

当我以前这样做的时候,手动将一个电子邮件地址传递给" to“参数,它工作得很好,但是现在它在标题中给出了错误:"ValueError:需要超过1个值才能解包。似乎导致错误的代码行是email.send()

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

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-21 20:23:45

找到了解决方案。实际上,非常简单。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
addresses = User.objects.filter(group__group='Operations').values_list('email', flat=True)
票数 1
EN

Stack Overflow用户

发布于 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所期望的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17243574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文