Django管理员:添加操作按钮发送电子邮件



我有一个模型,其中Mail是外键。用户可以添加一个邮件对象,我想在单击应发送电子邮件时向更改表单添加一个按钮。

型号.py

class Evaluation(models.Model):
...
mail                        = models.ForeignKey(Mail, related_name="evaluation", null=True, blank=True, on_delete=models.CASCADE)

我可能想让按钮执行这样的操作:

def process(self):
if self.mail is not None:
send_mail(
self.mail.subject,
self.mail.body,
settings.EMAIL_HOST_USER,
[self.lead.user.email],
fail_silently=False
)

我怎样才能达到同样的目的?

一个选项是在定义管理类时使用actions

https://docs.djangoproject.com/en/3.1/ref/contrib/admin/actions/

在您的管理员.py:

def send_emails(modeladmin, request, queryset):
for obj in queryset:
#call the process function defined in your Evaluation model
obj.process()
send_emails.short_description = 'Send e-mails'

@admin.register(Evaluation)
class EvaluationAdmin(admin.ModelAdmin):
...
actions = [send_emails]

这将为您提供一个下拉选项,用于向管理员列表中的选定对象发送电子邮件。

另一种选择是覆盖管理模板更改表单,为该按钮添加一个自定义按钮和url,并像处理任何正常视图一样处理它。

在您的管理员.py:

@admin.register(Evaluation)
class EvaluationAdmin(admin.ModelAdmin):
change_form_template = 'admin/evaluation_change_form.html'
...

然后在您的基本模板目录中

{% extends "admin/change_form.html" %}
{% block form_top %}
<form action="{% url 'send-email' pk=original.id %}" method="POST">
{% csrf_token %}
<input type="submit" value="Send Email" name="email">. 
</form>
{% endblock %}

然后在urls.py中添加一个用于发送电子邮件的url

url(r'^send-email/(?P<pk>d+)/$', SendEmail.as_view(), name='send-email'),

然后在视图中:

from django.views import View

class SendEmail(View):
def post(self, request, *args, **kwargs):
obj = get_object_or_404(Evaluation, pk=self.kwargs['pk'])
#call the process function defined in your Evaluation model
obj.process()

最新更新