首页 > 解决方案 > 表单字段输入的Python Django长度为1,即使它为空

问题描述

我正在使用 Python(3.6) 和 Django(2.1) 开发一个项目,我需要在其中实现搜索功能。我有两个搜索字段whatwhere. 用户可以为这两个字段输入多个值并用 a 分隔它们,,然后我需要在将它们拆分后检查两个字段的长度,。当一个字段为空时,它的长度应该是0,但在我的情况下,它表明1即使字段为空,长度也是如此。

这是我的代码: 来自 forms.py:

class FetchDataForm(forms.Form):
    what = forms.CharField(max_length=256, required=True)
    where = forms.CharField(max_length=256, required=False)

    class Meta:
        fields = ('what', 'where')

从模板/search.html:

<form method="POST" action="{% url 'udata:fetch-data' %}">
            {% csrf_token %}
            <div class="form-row">
                <div class="form-group col-md-5">
                    <label for="inputEmail4" style="font-size: x-large">What:</label>
                    <br><span class="help"
                              style="font-size: smaller; padding-top: 0%;"> keywords, or company</span>
                    {% if dd.what %}
                        <input type="text" name="what" value="{{ dd.what }}" class="form-control" id="inputEmail4">
                    {% else %}
                        <input type="text" name="what" class="form-control" id="inputEmail4">
                    {% endif %}
                </div>
                <div class="form-group col-md-5">
                    <label for="inputEmail4" style="font-size: x-large">Where:</label>
                    <br><span class="help"
                              style="font-size: smaller; padding-top: 0%;">City, State or Zip code</span>
                    {% if dd.where %}
                        <input type="text" name="where" value="{{ dd.where }}" class="form-control"
                               id="inputPassword4">
                    {% else %}
                        <input type="text" name="where" value="" class="form-control" id="inputPassword4">
                    {% endif %}
                </div>
                <label for="inputPassword4">&nbsp;</label>
                <br><span class="help" style="font-size: smaller;"> &nbsp;</span>
                <div class="form-group col-md-2">
                    <button type="submit" class="btn btn-primary btn-lg" style="margin-top:10%">Search</button>
                </div>
            </div>

        </form>

从views.py

what = form.cleaned_data['what']
where = form.cleaned_data['where']
get_len_what = len(what.split(','))
get_len_where = len(where.split(','))
print('What len is {}'.format(get_len_what))
print('where len is {}'.format(get_len_where))

1即使字段为空,它也会打印出长度。这里有什么问题?

标签: pythonhtmldjangodjango-templates

解决方案


这是一个有效的解决方案:

what = form.cleaned_data['what']
if ',' not in what and len(what) > 0:
    get_len_what = len(what.split(','))
elif ',' in what and len(what) > 0:
    get_len_what = len(what.split(','))
else:
    get_len_what = len(what.split(',')) - 1

而且,我们可以为另一个实现相同的功能,即where.


推荐阅读