Django:动态更改电子邮件收件人

时间:2018-08-17 14:22:35

标签: django django-forms django-views

我在网站上制作了反馈表。我制作了一个名为“ globalapp”的模型,其中包含将来管理员的所有设置,它具有电子邮件,地址和电话字段,没有添加或删除此对象的权限。

在我看来,我有一个简单的代码:

def index(request):
    seos = SEO.objects.get(id__exact=1)
    socs = Social_networks.objects.get(id__exact=1)
    globs = globalapp.objects.get(id__exact=1)
    index = Index.objects.get(id__exact=1)

    form = ContactForm(request.POST)

    if form.is_valid():
        subject = form.cleaned_data['subject']
        sender = form.cleaned_data['sender']
        message = form.cleaned_data['message']
        fille = form.cleaned_data['fille']
        recepients = ['test@test.ru']

        from_email, to =  sender, recepients

        html_content = loader.render_to_string('globalapp/chunks/email_tpl.html',
    {'subject': subject, 'sender':sender, 'message':message, 'fille':fille})

        msg = EmailMultiAlternatives(subject, html_content, from_email, to)
        msg.send()

    return render(request, 'globalapp/index.html', {'seos': seos, 
                                                   'socs': socs,
                                                   'globs': globs,
                                                   'index': index,
                                                   'form': form })

现在,通过test@test.ru发送邮件。我想从globalapp对象中获取电子邮件字段,并将其放入“收件人”中,以使管理员能够在需要时更改电子邮件地址。

我得到的最好的东西是,我通过queryset通过以下方式获得电子邮件值:

email = globalapp.objects.filter(id=1).values('email')

by ive ive中只有To: {'email': 'test@gmail.com'}

那么问题是如何从queryset对象获取字符串以更改动态电子邮件收件人?还是我可以选择其他方法?

我还有一个小问题,我还无法解决:按下提交按钮后,页面重新加载,并且我不需要它,我可以以某种方式禁用它吗?

1 个答案:

答案 0 :(得分:1)

这里有两个问题:

  1. 您使用.filter(..),而过滤器意味着您没有得到单个字典,而是得到了QuerySet个字典。它可以为空,可以包含一个或多个元素。由于您对id=...进行了过滤,因此它最多可以包含 个元素,但是仍然需要一些额外的逻辑才能将其从QuerySet中解包出来,因此我们最好使用{ {1}}在这里;和
  2. 我们获得一个字典,我们可以通过执行元素查找来检索与键关联的元素,因此.get(..)

我们可以通过以下方式获取电子邮件地址:

the_dict['email']

或更优雅:

email = globalapp.objects.values('email').get(id=1)['email']
  

我还有一个小问题,我还无法解决:按下提交按钮后,页面重新加载,并且我不需要它,我可以以某种方式禁用它吗?

不带表单,因为这正是浏览器应该执行的任务:发送HTTP请求并加载响应。但是您可以在网页保持不变的情况下使用AJAX调用执行HTTP请求。