【问题标题】:Django form-wizard typechoicefield returning string instead of booleanDjango form-wizard typechoicefield返回字符串而不是布尔值
【发布时间】:2013-11-20 17:43:56
【问题描述】:

所以我正在使用 Django 1.3 form-wizard https://github.com/stephrdev/django-formwizard 并且我的 typechoice 字段出现问题,该字段返回 u'False' 而不仅仅是 False (boolean)

我该怎么办?

ONE_OR_MULTIPLE_CHOICES = (
    (False, 'One'),
    (True, 'Multiple')
)

class PublicJobCreateForm(forms.Form):
    multiple = forms.TypedChoiceField(choices=ONE_OR_MULTIPLE_CHOICES, widget=forms.RadioSelect)

我是这样打电话的:

def done(self, form_list, **kwargs):
    create_form_data = form_list[0].cleaned_data
    if create_form_data['multiple']:
        print "something"

有什么想法吗?

【问题讨论】:

    标签: python django python-2.7 django-formwizard choicefield


    【解决方案1】:

    您尚未为您的TypedChoiceField 指定coerce

    ONE_OR_MULTIPLE_CHOICES = (
        (0, 'One'),
        (1, 'Multiple')
    )
    
    multiple = forms.TypedChoiceField(choices=ONE_OR_MULTIPLE_CHOICES,
                                      widget=forms.RadioSelect,
                                      coerce=int)
    

    如果您想使用FalseTrue 而不是01,请注意使用coerce=bool 不起作用。这是因为字符串'False' 被强制转换为TrueThis answer 建议使用自定义 lambda 函数:

    coerce = lambda x: x == 'True'
    

    【讨论】:

    • @psychok7 我正要改回我的答案,但后来我看到你删除了你的评论。使用 lambda 函数进行强制是否有效?
    • 我返回了你写的答案(0 和 1 而不是 bool),因为它有效……你之前的答案根本无效
    猜你喜欢
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2016-01-06
    • 1970-01-01
    • 2017-04-22
    相关资源
    最近更新 更多