2011-02-24 71 views
1

我有一个简单的ChoiceField,并希望在我的模板呈现过程中访问'selected'项目。Django ChoiceField获取当前选择

可以说形式得到再次显示(由于领域的一个错误),有没有办法做这样的事情:

<h1> The options you selected before was # {{ MyForm.delivery_method.selected }} </h1> 

(.selected()不工作..)

谢谢!

+2

如果按照文档中所示的正常方式重新渲染表单,则所有字段都应具有其先前的值,包括选择字段。如果这没有发生,你需要显示你的代码,以便我们可以告诉你哪里出错了。 – 2011-02-24 19:37:01

+0

我正在使用自定义方法来显示表单,因为我需要为AJAX添加各种特殊字段。 – Boris 2011-02-25 09:28:31

回答

2

它将由{{ myform.delivery_method.data }}

<h1> The options you selected before was # {{ MyForm.delivery_method.data }} </h1> 
+0

对于更新的Django版本,它是.value而不是.data。 – mrmuggles 2018-03-01 20:39:06

4

@Yuji然而访问建议bund_choice_field.data,将返回值不是用户(在value="backend-value"使用)是可见的。在你的情况下,你可能希望用户可以看到文字值(<option>literal value</option>)。我认为没有简单的方法可以从模板中的选择字段获得字面值。所以我使用模板过滤器,做的是:

@register.filter(name='choiceval') 
def choiceval(boundfield): 
    """ 
    Get literal value from field's choices. Empty value is returned if value is 
    not selected or invalid. 

    Important: choices values must be unicode strings. 

     choices=[(u'1', 'One'), (u'2', 'Two') 
    """ 
    value = boundfield.data or None 
    if value is None: 
     return u'' 
    return dict(boundfield.field.choices).get(value, u'') 

在模板它看起来就像这样:

<h1> The options you selected before was # {{ form.delivery_method|choiceval }} </h1> 

更新:我忘了提一个重要的东西,那你就需要选择使用unicode值。这是因为从窗体返回的数据总是在unicode中。所以dict(choices).get(value)不会工作,如果整数在选择中使用。

相关问题