【问题标题】:How to manually inject NullBooleanField data in form?如何在表单中手动注入 NullBooleanField 数据?
【发布时间】:2016-04-06 13:55:21
【问题描述】:

我正在使用一个小部件框架,不幸的是,该框架将一些输入移到了 DOM 中的 <form> 标记之外。因此,我必须创建隐藏的输入,然后使用 javascript 设置它们以使它们在 request.POST 中传递。

问题是,虽然我使用了"Yes""No""Unknown"as per the docs here,但它们在cleaned_data 中被转换为None。以下是从相关视图中的几个打印函数中获取的示例:

request.POST.urlencode()

n_var=Yes&n_short=Unknown&p_widget=Unknown&n_long=Yes&verbatim=Blah ...

form.cleaned_data

{'n_var': None, 'n_short': None, 'p_widget': None, 'n_long': None, 'verbatim': 'Blah' ...

表单是ModelForm,并保存不是NullBooleanField 的字段。摘录:

class MyForm(forms.ModelForm):
    n_var = forms.NullBooleanField(required=False)
    n_short = forms.NullBooleanField(required=False)
    p_widget = forms.NullBooleanField(required=False)
    n_long = forms.NullBooleanField(required=False)
    verbatim = forms.CharField(required=False, max_length=32) #saves fine

发生了什么事?如何手动将 NullBoolean 数据导入表单?

【问题讨论】:

    标签: javascript django forms


    【解决方案1】:

    小部件的显示值为“未知”、“是”、“否”。

    但是,如果您查看source code,您会看到提交的值是“1”、“2”和“3”(分别代表“未知”、“是”和“否”)。

    您应该为隐藏的输入使用字符串。

    【讨论】:

    • 哦,哇,我不知道来源如此容易获得!你是圣人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2023-04-02
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 2018-02-04
    • 2018-10-22
    相关资源
    最近更新 更多