2013-10-15 30 views
0

我有一個基本表單,用於捕獲用戶提交的數據,並通過Django的郵件模塊通過電子郵件發送。傳遞給send_mail的表單數據的Get_FOO_display方法

但我希望電子郵件的主題和消息包含order_type選項的人類可讀版本。

如何修改我的視圖以顯示此信息?

這裏是我的形式:

from django import forms 
from django.contrib.localflavor.us.forms import USPhoneNumberField 

import datetime 

class OrderForm(forms.Form): 
    CAKE = 'CA' 
    CHEESECAKE = 'CH' 
    COFFEECATERING = 'CO' 
    BREAKFASTPLATTER = 'BR' 
    COOKIEPLATTER = 'CP' 
    GOURMETDESSERTSPLATTER = 'GD' 
    ORDER_TYPE_CHOICES = (
     (CAKE, 'Cake'), 
     (CHEESECAKE, 'Cheesecake'), 
     (COFFEECATERING, 'Coffee catering'), 
     (BREAKFASTPLATTER, 'Breakfast platter'), 
     (COOKIEPLATTER, 'Cookie platter'), 
     (GOURMETDESSERTSPLATTER, 'Gourmet desserts platter'), 
    ) 
    name = forms.CharField(max_length=100, required=True, help_text='100 characters max.') 
    phone_number = USPhoneNumberField(required=True, help_text='This will allow us to contact you in case of questions regarding your order. Please include your area code.') 
    email_address = forms.EmailField(required=True, help_text='We will e-mail you to confirm we have received your order, and submitted it to our bakers and baristas.') 
    date_needed = forms.SplitDateTimeField(required=True, help_text='We can only accept online orders that are placed three days in advance.') 
    order_description = forms.CharField(required=True, help_text='Please describe your order.') 
    order_type = forms.ChoiceField(required=True, choices=ORDER_TYPE_CHOICES) 

這是我的觀點:

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 description: %s\nDate needed: %s" % (name, phone_number, email_address, 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

我通常只寫一個簡單的方法:

def human_order_type(order_id): 
    for a_tuple in OrderForm.ORDER_TYPE_CHOICES: 
     if order_id in a_tuple: 
      return a_tuple[1] 
    return None 
+0

我不是存儲形式數據在模型中。在這種情況下它將如何工作? –

+0

將它置於form.is_valid()的當前邏輯中;從那裏打電話。您不需要將表單數據保存在模型中。您從清理的數據中捕獲order_type。將它傳遞給上面的方法。然後在主題字符串中使用返回的字符串代替當前的order_type。 – professorDante