【发布时间】:2013-01-22 01:07:35
【问题描述】:
我正在尝试编写一些代码,每次用户修改模型对象时都会发送一封电子邮件。目前,我正在努力让 models.py 中的一种方法接收 post_save 信号。我意识到 post_save 信号通常被发送两次是众所周知的事实,因此,解决方法是利用 dispatch_uid 参数。我已经这样做了,但由于某种奇怪的原因,我继续收到两个信号。这是我应用的 model.py 文件中的代码。
from django.db import models
from django.db.models.signals import post_save
def send_email(sender, **kwargs):
print "Signal sent." #just a placeholder
post_save.connect(send_email, dispatch_uid="unique_identifier")
class Library_Associates (models.Model):
first_name = models.CharField(max_length = 200)
last_name = models.CharField(max_length = 200)
department_choices = (
('ENG', 'Engineering'),
('ART', 'Arts and Sciences'),
('AFM', 'Accounting and Financial Managment'),
('MAT', 'Mathematics'),
)
department = models.CharField(max_length = 3, choices = department_choices, default = 'ENG')
pub_date = models.DateTimeField ('date published')
def __unicode__(self):
return self.first_name
class Meta:
verbose_name_plural = 'Library Associates'
class Info_Desk_Staff (models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
salary = models.IntegerField()
hours_worked = models.IntegerField()
def __unicode__(self):
return self.first_name
class Meta:
verbose_name_plural = 'Info Desk Staff'
我已经多次重启服务器,重置/删除了应用程序的所有数据,但我仍然继续收到两个信号。我的代码有什么本质上的问题吗?任何建议或见解将不胜感激!谢谢!
【问题讨论】:
-
查看保存对象的视图/表单代码可能会有所帮助。有时,您可能会遇到实际保存对象两次而没有意识到的情况。
-
如果我说一些不相关的话,请原谅我,我对 Django 还是新手。您所说的视图/表单代码指的是我创建应用程序时自动生成的views.py,对吗?在这种情况下,我的 view.py 文件完全是空的,没有被改动过。
-
那么您只是在使用 Django 管理员来修改您的对象吗?否则,你把它保存在哪里?
-
是的,我在同一个应用文件夹中有一个 admin.py 文件。它的内容实际上由 4 行组成。两个模型导入和两个 admin.site.register("model_name")。我正在使用我相信的默认表格?具有 3 个保存选项的那个。至于我保存它的位置,我认为数据保存在我在项目目录中创建的“test_database.db”文件中。
标签: python django duplicates