显示“可读”列表,以便在电子邮件主题中输出多个EchoIceField

2024-09-28 17:25:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过Django的邮件模块在电子邮件主题和消息中显示MultipleChoiceField的表单输出。你知道吗

目前,主题列出的数据如下:

Order placed for [u'cake', u'cheesecake'] by Patrick Beeson

以下是我表格中接受输入的部分:

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,
    })

Tags: djangonamefromimportformdataaddressrequest
1条回答
网友
1楼 · 发布于 2024-09-28 17:25:00

这个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])

相关问题 更多 >