Django Admin中的QuerySet混淆

时间:2013-05-10 23:03:05

标签: django python-2.7 django-models django-admin django-queryset

Django / Python非常新,在阅读了大量有关此问题的文档和帖子后,我遇到了一个问题......

所以我正在开发一个简单的Django应用程序,它有一个SQLlite数据库/名称和电子邮件地址表。我希望能够从管理面板发送电子邮件,并使用我为给定名称/地址组合选择的复选框中的名称和电子邮件地址。表本身工作正常,因为我可以从我网站上的其他视图发送电子邮件。

我正在制作自定义管理操作,我认为这是正确的方法......

我以为我理解了queryset参数是什么以及它是如何工作的,但无论我做什么,我都会遇到'QuerySet' object has no attribute 'name'错误。显然,我不知道查询集在管理操作中的工作原理。

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), 'me@test.com', [queryset.address],
                      fail_silently=False)

admin.site.register(employeeEmail, employeeEmail_Admin)

我意识到这有点模糊,但基本上我希望弄清楚如何从我的employeeEmail模型/表中访问名称和地址属性,以便我可以从管理面板发送电子邮件。在我有queryset.name[queryset.address]的地方,这些只是示例占位符,因为我尝试了许多不同的事情而没有成功,我猜我没有接近解决方案。

1 个答案:

答案 0 :(得分:2)

这不是Python for循环的工作方式。你想要这样的东西:

    for employee in queryset:
        message = loader.get_template('email.txt')
        messageContext = Context({
            'name': employee.name
        })
        send_mail('Test Subject Line', message.render(messageContext), 'me@test.com', [employee.address],
                  fail_silently=False)

关键是queryset提供了employeeEmail模型的多个实例。当您在查询集上运行for循环时,employee将按顺序绑定到每个循环。