django - 如何允许 auth 用户从 django admin 发送时事通讯
问题描述
我正在为公司网站实施通讯应用程序。我的目标是让“未来”的网站管理员直接从管理员那里发布新闻通讯。
为此,我编写了以下代码:
模型.py
from django.db import models
from ckeditor.fields import RichTextField
class NewsletterSubscription(models.Model):
datetime = models.DateTimeField(auto_now_add = True)
email = models.EmailField(max_length=128)
class Meta:
verbose_name = 'Iscritto Newsletter'
verbose_name_plural = 'Iscritti Newsletter'
def __unicode__(self):
return self.email
class Newsletter(models.Model):
EMAIL_STATUS_CHOICES = (
('Draft', 'Draft'),
('Pubblicata', 'Pubblicata')
)
subject = models.CharField(max_length=250)
body = RichTextField()
email = models.ManyToManyField(NewsletterSubscription)
status = models.CharField(max_length=10, choices=EMAIL_STATUS_CHOICES)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __unicode__(self):
return self.subject
我想知道是否可以在NewsletterAdminForm中添加一种允许触发电子邮件的按钮。
管理员.py
from django import forms
from django.contrib import admin
from .models import NewsletterSubscription, Newsletter
from ckeditor.widgets import CKEditorWidget
class NewsletterSubscriptionAdmin(admin.ModelAdmin):
list_display = ('email', 'datetime', )
class NewsletterAdminForm(forms.ModelForm):
body = forms.CharField(widget=CKEditorWidget())
class Meta:
model = Newsletter
fields = '__all__'
class NewsletterAdmin(admin.ModelAdmin):
form = NewsletterAdminForm
admin.site.register(NewsletterSubscription, NewsletterSubscriptionAdmin)
admin.site.register(Newsletter, NewsletterAdmin)
提前感谢您提供的任何帮助。
解决方案
要在管理面板中获取按钮,您可以简单地创建一个返回 html 的方法:
class NewsletterAdmin(admin.ModelAdmin):
...
readonly_fields = ['send_mails']
def send_mails(self, obj):
url_red = 'url_of_your_view_to_send_mails'
return format_html(
'<a class="button" href="{}">Send</a> ',
url_red,
)
然后,这将呈现为管理页面中的一个按钮,该按钮将向视图提供的 url 发送一个 GET 请求,您可以在其中定义所有逻辑并发送邮件。请务必在fields属性中包含此自定义字段。
希望能帮助到你。
推荐阅读
- java - 使用 @EmbeddedId 请求休眠不工作(Spring boot - 2.3.1.RELEASE)
- r - 使用 rhandsontable 转置与计数
- r - 在 R 中创建一个数据框,其中总结了所有独特的模式和它们存在的类
- reactjs - 如何使用 Top Navigator 和 Bottom Navigator 而不让 Top Navigator 与 React Navigation 中的状态栏重叠?
- php - 使用通配符将未知数量的关键字绑定到 SQL 语句
- python - 如何使用 Python 在 for 循环中将 json 对象写入和读取到谷歌云中的文件
- primefaces - 如何在过滤后更新和显示 p:dataTable 中的记录数?
- excel - 工作表声明出错
- c++ - 在 mac 命令行开发人员工具中找不到执行头 C++
- sed - 使用 sed 更新 json - Docker 容器