我正在尝试在字段更改后发送电子邮件。我已经完成了我的研究并看到了很多类似问题的解决方案,但似乎没有解决我的问题。
似乎问题来自于我在save方法的开头定义'user'的事实。请帮忙!
class CountryList(model.Models):
score= models.PositiveSmallIntegerField(null=True, blank = True, choices=zip(range(1, 11), range(1, 11)))
country = models.CharField(max_length=100, null =True, blank=True)
def save(self, user, *args, **kwargs):
old_CountryList = CountryList.objects.get(pk=self.id)
if old_CountryList.score!= self.score:
send_mail('The user ' + user.username + ' has changed the Score for ' + self.country \
+ 'from ' + str(old_CountryList.score) + ' to ' \
+ str(self.score) + '.\nThis change was made at ' \
+ str(datetime.datetime.now())[:19] + '. \n\nLink to the change: http://' \
+ socket.gethostname() + '/home/countries/' + str(self.id), # email body
'some_email_here', # send from
settings.EMAIL_RECIPIENTS, # send to
fail_silently=False)
super(CountryList, self).save(*args, **kwargs) # Call the "real" save()
答案 0 :(得分:1)
Django的Model
API期望Model.save()
坚持定义的签名,因为框架的其他部分,贡献和第三方应用依赖于此。
同样从Model.save()
方法发送邮件真的是一个糟糕的想法......你必须明白模型是(并且必须保持)与HTTP请求(视图...)周期严格分离 - 因为它们也可能被其他代码修改(想想自定义管理命令等),你不一定有手头的“当前用户”(也不想向任何人发送邮件)。
在您的情况下,因为您显然只关心通过应用程序的视图进行更改,邮件应该由视图本身发送。