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

信号.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 modelsfrom signals.py

__init__.py

import signals
于 2013-03-22T08:42:44.773 回答
1

Define your signal and receiver in signals.py:

from django.dispatch import Signal

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

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

post_update.connect(send_update, sender = Book)

In views.py, send the signal right after you save the form:

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