Django-创建对象时发送电子邮件

时间:2019-04-06 19:44:21

标签: django

通常,为了在创建对象时发送电子邮件,我将覆盖save方法:

def save(self, *args, **kwargs):
    send_email(context)
    return super().save(*args, **kwargs)

但是,我现在需要上下文包含对象的属性,该属性在保存对象之前是未知的,即与模型对象关联的File对象的url。

我知道这可以通过post_save信号来完成,但是文档给人的印象是,当不同的模型需要访问此类信息时,最好使用此方法。我觉得在这样的单模型设置中使用它不是一个好习惯。

我已经尝试过了:

    foo = super().save(*args, **kwargs)
    send_email(foo.document.url)
    return foo

但是foo似乎是None

2 个答案:

答案 0 :(得分:0)

save方法不返回任何内容。但是项目是//instantiate dictionary of dictionaries var LANG = new Dictionary<string, Dictionary<int, string>>(); //set dictionary for "en" key LANG["en"] = new Dictionary<int, string>() { { 11, "Name" }, { 20, "Surname" }, { 21, "Age" }, { 22, "Profession" } }; //set dictionary for "es" key LANG["es"] = new Dictionary<int, string>() { { 11, "Nombre" }, { 20, "Apellido" }, { 21, "Edad" }, { 22, "Profesión" } }; ,您可以在调用super之后使用它。

self

答案 1 :(得分:0)

Daniel的回答是正确的,但是如果您只想在创建对象时发送电子邮件,而不是更新对象,则还应该检查实例是否分配了pk,例如:

def save(self, *args, **kwargs):
    created = self.pk is None
    return super().save(*args, **kwargs)
    if created:
        send_email(context)