我正在尝试访问电子邮件模板中的data.get_age_display。我似乎无法得到这个的显示。我不确定我做错了什么,我之前已经多次使用过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}}任何想法?
杰夫
答案 0 :(得分:0)
您尚未显示您正在创建的订单模型的代码。您确定模型上的age
字段设置了choices
吗?
您是否没有使用ModelForm?您正在表单的Order
方法中创建save()
对象,但不返回它。 modelform会为您做到这一点,并且无需重新声明表单的字段。
答案 1 :(得分:0)
我知道这会比被发布的问题晚了WAAAAAY,但这是我对完整性的回答以及其他可能从中受益的人: - )
我将假设在AGE_GROUP中,ADULT,SENIOR和STUDENT是整数。表单清理不会自动清除POST中包含的字符串并返回整数。所以在这段代码中:
context = Context({
'data': order,
})
你会认为order.age指的是一个整数,但事实上,这是不正确的。它之前烧了几次因为这个会正确地将整数保存到物理表中,但是订单实例仍然具有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不会自动删除输入的文本,你也可以使用这种方法来修复它。