【问题标题】:Django not cleaning certain form fieldsDjango没有清理某些表单域
【发布时间】:2019-03-03 06:08:21
【问题描述】:

所以我的表格如下:

class Uploaded_Cisco_YML_Configs(forms.Form):
    uploaded_configs = forms.FileField()
    goto_model = forms.TextInput()
    interfaces_migrate = forms.Textarea()

我遇到的问题是 goto_model 和 interfaces_migrate 表单字段是在 form.data 字典中定义的,但它们不在 form.cleaned_data 中,所以我无法正确访问它们。有什么原因会发生这种情况吗?

HTML 如下

            <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <input id="uploaded_configs" name="uploaded_configs" type="file" multiple/>
        <br>
        New Model:<br>
        <input type="text" name="goto_model">
        <br>Interfaces to Migrate:
        <br>
        <input type="text" name="interfaces_migrate">
        <input type="submit" value="Run Script"/>
         </form>

views.py 在下面

form = Uploaded_Cisco_YML_Configs(request.POST, request.FILES)
        if form.is_valid():
            rebuild_args = []
            if form.goto_model is not None:
                print("#"*10)
                print(str(form.data))
                print(str(form.cleaned_data))

【问题讨论】:

    标签: django python-2.7 django-forms


    【解决方案1】:

    TextInput 和 Textarea 不是表单域,它们是小部件。您需要定义一个字段,然后根据需要设置小部件参数。

    class Uploaded_Cisco_YML_Configs(forms.Form):
        uploaded_configs = forms.FileField()
        goto_model = forms.CharField()
        interfaces_migrate = forms.CharField(widget=forms.Textarea())
    

    (您不需要为 goto_model 设置小部件,因为 TextInput 是 CharField 的默认设置。)

    注意if form.goto_model is not None 永远不会为假,因为它指的是字段定义而不是值;您需要访问form.cleaned_data['goto_model'],但即使这样也没有意义,因为该字段是必需的,因此如果该字段为空,则该表单将无效。

    【讨论】:

      猜你喜欢
      • 2020-11-22
      • 2021-06-08
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 2013-07-28
      • 2015-09-01
      • 2010-09-23
      • 2013-12-26
      相关资源
      最近更新 更多