很新的Django的/ Python的,我已经阅读关于这个问题吨文档和帖子后,创下了砖墙...查询集混乱Django管理
所以我工作的一个简单的Django的应用程序,有一个SQLlite数据库/名称和电子邮件地址表。我希望能够通过管理面板发送电子邮件,并使用我为特定名称/地址组合选择的复选框使用名称和电子邮件地址。桌子本身工作正常,因为我可以从我的网站上的其他视图发送电子邮件。
我正在做一个自定义的管理动作的话,我认为这是去了解这个正确的方法...
我想我理解的queryset参数是什么以及它的功能如何,但无论我做什么,我都会收到'QuerySet' object has no attribute 'name'
错误。很明显,我不知道queryset如何在管理操作中起作用。
from django.contrib import admin
from email_check.models import employeeEmail
from django.template import loader, Context
from django.core.mail import send_mail
class employeeEmail_Admin(admin.ModelAdmin):
list_display = ('name', 'address')
actions = ['resend_message']
def resend_message(self, request, queryset):
for employeeEmail.address in queryset:
message = loader.get_template('email.txt')
messageContext = Context({
'name': queryset.name
})
send_mail('Test Subject Line', message.render(messageContext), '[email protected]', [queryset.address],
fail_silently=False)
admin.site.register(employeeEmail, employeeEmail_Admin)
我意识到这是一个有点模糊,但基本上我希望找出如何访问的名称和地址,不让我employeeEmail
模型/表的属性,所以我可以从管理面板发送电子邮件。我有queryset.name
和[queryset.address]
,那些只是示例占位符,因为我尝试过许多不同的事情,但都没有成功,我猜我没有靠近解决方案。
** YES!**这工作完美!我更关心queryset的工作方式,并没有意识到我可以在我的循环/管理操作中使用'employeeEmail.name'和'employeeEmail.address'。没有for循环会有更好的方法吗? – purpleSun 2013-05-10 23:21:27
您可以使用send_mass_mail而不是send_mail来节省一些时间,但需要花费更多的内存来构建消息元组。只要你需要为每个收件人定制消息(添加他们的名字或类似的东西),我没有看到避免for循环的好方法。如果每个人的消息都相同,则可以使用values_list查询批量提取电子邮件地址。 – 2013-05-10 23:28:57
实际上,现在我已经检查了源代码而不仅仅是文档,我发现你可以使用一个懒惰的评估生成器,它返回一个元组来代替send_mass_mail实际的消息元组,这样可以节省额外的记忆。除了内部,send_mass_mail无论如何都会创建一个列表。我想它仍然可以为你节省一些记忆,但不像我第一次想到的那样。 – 2013-05-10 23:35:31