我在网站上制作了反馈表。我制作了一个名为“ 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对象获取字符串以更改动态电子邮件收件人?还是我可以选择其他方法?
我还有一个小问题,我还无法解决:按下提交按钮后,页面重新加载,并且我不需要它,我可以以某种方式禁用它吗?
答案 0 :(得分:1)
这里有两个问题:
.filter(..)
,而过滤器意味着您没有得到单个字典,而是得到了QuerySet
个字典。它可以为空,可以包含一个或多个元素。由于您对id=...
进行了过滤,因此它最多可以包含 个元素,但是仍然需要一些额外的逻辑才能将其从QuerySet
中解包出来,因此我们最好使用{ {1}}在这里;和.get(..)
。我们可以通过以下方式获取电子邮件地址:
the_dict['email']
或更优雅:
email = globalapp.objects.values('email').get(id=1)['email']
我还有一个小问题,我还无法解决:按下提交按钮后,页面重新加载,并且我不需要它,我可以以某种方式禁用它吗?
不带表单,因为这正是浏览器应该执行的任务:发送HTTP请求并加载响应。但是您可以在网页保持不变的情况下使用AJAX调用执行HTTP请求。