2013-10-15 22 views
0

我想通過Django的郵件模塊在電子郵件主題和消息中顯示MultipleChoiceField的表格輸出。顯示電子郵件主題中MultipleChoiceField輸出的「可讀」列表

目前,這樣的主題列表中的數據:

訂單由Patrick比森放置[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, '[email protected]', ['[email protected]', email_address]) 
      return HttpResponseRedirect('thanks/') 
    else: 
     form = OrderForm() 

    return render(request, 'order_form/order.html', { 
     'form': form, 
    }) 

回答

2

The 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])