2014-03-26 69 views
0

我在我的模型中有一个布尔字段,指示发送给用户一些信息的电子邮件。 当我在admin中更新它时,我使用模型中的save()方法,并且实际上发送了电子邮件。这工作。django管理员操作vs保存模型类

但是:

当我尝试使用这样定义自己的行为:

def send_this_email(modeladmin, request, queryset): 
    queryset.update(mail_sent=True) 
send_this_email.short_description = "Send email with access data" 

,并在管理类:

actions = [send_this_email] 

save()似乎没有被执行和电子邮件的方法未发送。我如何强制我的send_this_email执行保存?

如果它很重要我使用grappeli为我的django管理员。

+0

但是,发送电子邮件的代码在哪里? –

+0

@DanielRoseman它在save()方法 – andi

回答

1

Django的文档指定调用一个查询集的update()不会调用save或调用任何保存前/保存后的钩子。我建议你在需要发送电子邮件时明确地调用该函数。

或者,您可以在管理函数中调用save(),但是这会失去update()方法的优点。

+0

那我该如何执行它呢?我应该迭代queryster并调用方法吗?试过。不工作。 – andi

+0

是的,这应该工作。迭代查询集中的对象时会发生什么? – DavidM

+0

是部分。现在我不知道如何引用先前的值。 – andi