2010-09-13 64 views
1

我試圖訪問我的電子郵件模板中的data.get_age_display。我似乎無法得到這個顯示。我不確定我在做什麼錯誤,我之前使用過無數次get_FIELD_display,但作爲上下文傳遞給普通模板。有什麼不同的形式?Django get_FIELD_display

class RequestForm(forms.Form): 

    ADULT = 1 
    SENIOR = 2 
    STUDENT = 3 

    AGE_GROUP = (
     (ADULT, 'Adult'), 
     (SENIOR, 'Senior'), 
     (STUDENT, 'Student'), 
    ) 


    name = forms.CharField(max_length=255) 
    phone = forms.CharField(max_length=15) 
    age = forms.ChoiceField(choices=AGE_GROUP) 
    details = forms.CharField(widget=forms.Textarea()) 

    def save(self): 
     order = Order(
      name = self.cleaned_data['name'], 
      phone = self.cleaned_data['phone'], 
      age = self.cleaned_data['age'], 
      details = self.cleaned_data['details'], 
     ) 
     order.save() 

     template = loader.get_template('request_email.txt') 

     # send over the order object in an email extracted so they can handle the ticket order 
     context = Context({ 
      'data': order, 
     }) 

     #import pdb; pdb.set_trace() 

     email_subject = 'Request Tickets' 
     mail_managers(email_subject, template.render(context)) 

在我的request_email.txt中我所做的是{{data.get_age_display}}任何想法?

Jeff

回答

0

您尚未顯示您要創建的Order模型的代碼。您確定模型上的age字段已設置爲choices嗎?

你沒有使用ModelForm的原因?您在窗體的save()方法中創建了一個Order對象,但未返回該對象。模型將爲你做到這一點,並消除重新聲明表單域的需求。

+0

Daniel,我爲了簡化省略了一些代碼,modelform不適合我所做的事情。下面是階模型 – Jeffrey 2010-09-13 20:55:09

0

我知道這是晚些時候推出WAAAAAY不是被張貼的問題,但這裏是我的完整性和別人誰可能從中受益:-)

我要去假設,在AGE_GROUP,成年,老年的答案和學生是整數。您的表單清理不會自動清理POST中包含的字符串並返回一個整數。所以在這個代碼中:

context = Context({ 
    'data': order, 
}) 

你會認爲order.age是指一個整數,但實際上是不正確的。因爲這個正確地將整數保存到物理表中,但它仍然被燒燬了幾次,但是該順序實例仍然具有年齡字段的字符串表示形式。

你可以做兩兩件事之一:
1.清潔這個領域:

clean_age(self): 
    return int(self.cleaned_data['age']) 

或創建一個新的字段類型:

def MyChoiceField(forms.ChoiceField): 
    def clean(self, value): 
     if not value: 
      if self.required: 
       raise forms.ValidationError(self.error_messages['required']) 
       return None 
      else: 
       return None 
     return int(value) 

鏈接到表單字段:

age = MyChoiceField(choices=AGE_GROUP) 

然後您就可以將此邏輯應用於其他任何在未來這樣的選擇領域。就個人而言,我發現後者是最好的方法,我將所有自定義字段類型都粘貼到form_utils文件中,以便我可以在任何地方使用它們。另一個問題是forms.charField不會自動去除輸入的文本,你也可以使用這種方法來解決這個問題。