2

私のサンプルでは、​​信号関数はmodels.pyで作成されました。これの代わりに、カスタム信号の概念を使用して実行できると思います。

シグナル関数の私のmodels.pyは

class Book(models.Model):
    [..........]

def send_update(sender, instance, created, **kwargs):
    if instance.author_name:
        message = "Book is updated"
        subject = "Updates"
        send_mail(subject, message, your_email,
            [instance.email,])

post_save.connect(send_update, sender=Book)

views.pyは

if request.POST:
        form = BookForm(request.POST)

        if form.is_valid():
            cd = form.cleaned_data
            form.save()
            return redirect('/index/')
    return render_to_response('addbook.html',{ 'form':form },context_instance=RequestContext(request))

これの代わりに、signals.pyファイルを使用してメールを送信するカスタムシグナルを作成するにはどうすればよいですか。

私はこれを実際に学ぼうとしています。例はそれをするのに役立ちます。

ありがとう

4

2 に答える 2

11

signals.py

from django.db.models.signals import post_save
from app.models import Book

def send_update(sender, instance, created, **kwargs):
    if instance.author_name:
        message = "Book is updated"
        subject = "Updates"
        send_mail(subject, message, your_email,
            [instance.email,])

post_save.connect(send_update, sender=Book)

アプリの__init__.pyファイルにインポートして信号を登録します。これにより、import modelsからが可能になりsignals.pyます。

__init__.py

import signals
于 2013-03-22T08:42:44.773 に答える
1

信号と受信機を次のように定義しますsignals.py

from django.dispatch import Signal

post_update = Signal(providing_args = ['instance'])

def send_update(...):
    ....

post_update.connect(send_update, sender = Book)

views.py、フォームを保存した直後に信号を送信します。

instance = form.save()
post_update.send(sender = Book, instance = instance)
于 2013-03-22T06:43:22.960 に答える