![](/img/trans.png)
[英]send_mail() missing 1 required positional argument: 'recipient_list'
[英]Django SubQuery Error when Building a Recipient List for send_mail() based on Custom Permission
我正在尝试为send_mail()的收件人列表编写代码,该列表将查询具有自定义权限的用户并将其放置在列表中。 目的是使用Django admin来使用户更容易将用户放入具有此权限的组中以接收电子邮件。 我收到more than one row returned by a subquery
。 我正在使用具有几个子模型的modelBase,因此自定义权限将其自身附加到多个模型上。 如何调整代码以清除此错误并生成所需的收件人列表。
这是我的models.py和views.py。 如果格式已关闭,我深表歉意,我不想用不必要的信息弄乱问题。 models.py:
class StoreNightlyReportsBase(models.Model):
store_nightly_report = models.ForeignKey(StoreNightlyReport)
no_new_item = models.BooleanField(verbose_name="Check if No New Items", default=False)
customer = models.CharField(verbose_name='Customer Name', max_length=20, null=True, blank=True)
class Meta:
abstract = True
permissions = (('nightly_reports','Nightly Reports'),
)
class StoreNightlyReportsNewLoan(StoreNightlyReportsBase):
...
class StoreNightlyReportsRenewals(StoreNightlyReportsBase):
...
views.py
class StoresNightlyReportsNewLoansCreate(CreateView):
...
def get_form(self, form_class=None):
...
def get_context_data(self, **kwargs):
...
def form_valid(self, form):
...
perm = Permission.objects.filter(codename='nightly_reports')
users = User.objects.filter(Q(groups__permissions=perm) | Q(user_permissions=perm)).distinct()
recipients = list(i for i in users.values_list('email', flat=True) if bool(i))
html_email = render_to_string('reports/email.html', {
'object': self.object,
'user': self.request.user,
})
send_mail(
'Nightly Numbers',
'Here is the message.',
'emailp@company.com',
[recipients],
html_message=html_email,
fail_silently=False,
)
return super(StoresNightlyReportsNewLoansCreate, self).form_invalid(form)
谢谢你的时间。
这里更广泛的问题是允许最终用户使用Django Admin将用户移动到具有特定权限的组中以接收电子邮件。 直接的问题是使用权限来完成此任务,但是引发了错误。
我决定回答更广泛的问题。 为此,我略微更改了方法。 通过这种方法,最终用户管理员将只将用户移到专门为接收电子邮件而设计的组中。 现在,我可以根据身份验证用户搜索该组,将该组中的电子邮件放入列表中,然后将其添加到send_mail()中的收件人中。
代码如下:
def form_valid(self, form):
...
groups = self.request.user.groups.filter(name__startswith='Nightly Reports')
recipients = list(User.objects.filter(
email__contains='@',
groups__in=groups).values_list('email', flat=True))
html_email = render_to_string('reports/email.html', {
'object': self.object,
'user': self.request.user,
})
send_mail(
'Nightly Numbers',
'Here is the message.',
'company@company.com',
recipients,
html_message=html_email,
fail_silently=False,
)
这可以回答更广泛的问题,并且可以通过不使用权限查询来消除直接问题引发的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.