1

Django/Python は初めてで、この問題に関する大量のドキュメントや投稿を読んだ後、壁にぶつかりました...

だから私は名前と電子メール アドレスの SQLlite データベース/テーブルを持つ単純な Django アプリに取り組んでいます。管理パネルから電子メールを送信し、指定された名前/アドレスの組み合わせで選択したチェックボックスから名前と電子メール アドレスを使用できるようにしたいと考えています。サイトの他のビューから電子メールを送信できるため、テーブル自体は正常に機能します。

そのためのカスタム管理アクションの作成に取り組んでいますが、これが正しい方法だと思います...

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]、これらはプレースホルダーの例にすぎません。成功せずにさまざまなことを試したので、解決策にはほど遠いと思います。

4

1 に答える 1

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、順番にそれぞれにバインドされます。

于 2013-05-10T23:08:04.267 に答える