我想通过Django的邮件模块在电子邮件主题和消息中显示MultipleChoiceField
的表单输出。
目前,主题列出如下数据:
由Patrick Beeson为[u'cake',u'cheesecake']下订单
这是接受输入的表单部分:
class OrderForm(forms.Form):
ORDER_TYPE_CHOICES = (
('cake', 'Cake'),
('cheesecake', 'Cheesecake'),
('coffee catering', 'Coffee catering'),
('breakfast platter', 'Breakfast platter'),
('cookie platter', 'Cookie platter'),
('gourmet desserts platter', 'Gourmet desserts platter'),
)
...
order_type = forms.MultipleChoiceField(required=False, choices=ORDER_TYPE_CHOICES, widget=forms.CheckboxSelectMultiple)
这是我的观点:
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from order_form.forms import OrderForm
def order(request):
if request.method == 'POST':
form = OrderForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
order_description = form.cleaned_data['order_description']
phone_number = form.cleaned_data['phone_number']
email_address = form.cleaned_data['email_address']
date_needed = form.cleaned_data['date_needed']
order_type = form.cleaned_data['order_type']
subject = "Order placed for %s by %s" % (order_type, name)
message = "Name: %s\nPhone number: %s\nEmail address: %s\nOrder type: %s\nOrder description: %s\nDate needed: %s" % (name, phone_number, email_address, order_type, order_description, date_needed)
from django.core.mail import send_mail
send_mail(subject, message, 'orders@business.com', ['name@gmail.com', email_address])
return HttpResponseRedirect('thanks/')
else:
form = OrderForm()
return render(request, 'order_form/order.html', {
'form': form,
})
答案 0 :(得分:2)
MultipleChoiceField resolves to a list of unicode objects。使它们“人类可读”的一种可能方法是简单地将其映射到str:
# map applies str to the outputted list
order_type = map(str,form.cleaned_data['order_type'])
if len(order_type) > 1:
delineated = ', a '.join(order_type[0:-1])
# You are free to include or omit the oxford comma
# ... unless you feel otherwise.
order_type = 'a {0}, and a {1}'.format(delineated,order_type[-1])
else:
order_type = 'a {0}'.format(order_type[0])