如何避免"超过GET / POST参数的数量"错误?

时间:2017-06-25 10:17:35

标签: html django forms

我在Django网站上创建了一个自定义管理页面,只允许管理员使用,并且能够更改对象及其属性。 对象的数量很多(完全是9220),在管理页面上,输入字段的数量与该模型中的对象数量相等。

这是代码:

<form action="{% url 'Home:AdminPrices' %}" id="mainForm" method="post">
{% csrf_token %}
{% for item in prices %}
    <ul class="row" style="width: 100%;padding: 0;background-color: white;height: 100px;display: flex;justify-content: left;white-space: nowrap;margin-bottom: 0;margin-top: 0;">
        <div style="width: 33.333333333333336%;background-color: white;display:  block;color: black;font-size: 0.8em;white-space: nowrap;text-align: center;font-family: 'Lato';padding-top: 25px;">{{ item.hashname }}</div>
        <div style="width: 33.333333333333336%;background-color: white;display:  block;color: black;font-size: 1.2em;text-align: center;font-family: 'Lato';padding-top: 25px;">{{ item.sug }}</div>
        <div style="width: 33.333333333333336%;background-color: white;display:  block;color: black;font-size: 1.2em;text-align: center;font-family: 'Lato';"><input type="number" value="{{ item.actual }}" name="prices_{{ item.actual }}" style="width: 100%;height: 100%;padding-bottom: 25px;background-color: white;border: 0;color: black;font-size: 1.2em;text-align: center;font-family: 'Lato';"></input></div>
    </ul>
{% endfor %}
    <input type="submit" id="mainSubmit" style="display: none;" name="submitPrices"></input>
</form>
<div onclick="document.getElementById('mainForm').submit();" style="background-color: black;border-radius: 5px;position: fixed;display: block;height: 50px;width: 200px;bottom: 0;left:0;right:0;margin: 0 auto;color: white;font-size: 1.5em;text-align: center;padding-top: 12.5px;cursor: pointer;">Submit</div>

按下提交按钮后,网站崩溃并提示输出此错误:

  

2017-06-25 10:05:53,158:超出了GET / POST参数的数量   settings.DATA_UPLOAD_MAX_NUMBER_FIELDS。 2017-06-25 10:05:53,860:错误   运行WSGI应用程序2017-06-25 10:05:53,934:TooManyFieldsSent:   超出了GET / POST参数的数量   settings.DATA_UPLOAD_MAX_NUMBER_FIELDS。 2017-06-25 10:05:53,934:
  文件   &#34; /home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py" ;,   第170行,致电 2017-06-25 10:05:53,935:response =   self.get_response(request)2017-06-25 10:05:53,935:2017-06-25   10:05:53,935:档案   &#34; /home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/core/handlers/base.py" ;,   第124行,在get_response 2017-06-25 10:05:53,935:response =   self._middleware_chain(request)2017-06-25 10:05:53,936:2017-06-25   10:05:53,936:文件   &#34; /home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/core/handlers/exception.py" ;,   第41行,内在2017-06-25 10:05:53,936:响应=   response_for_exception(request,exc)2017-06-25 10:05:53,936:   2017-06-25 10:05:53,936:文件   &#34; /home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/core/handlers/exception.py" ;,   第76行,在response_for_exception 2017-06-25 10:05:53,937:
  response = debug.technical_500_response(request,* sys.exc_info(),   status_code = 400)2017-06-25 10:05:53,937:2017-06-25 10:05:53,937:
  文件   &#34; /home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/views/debug.py" ;,   第84行,在technical_500_response 2017-06-25 10:05:53,937:html =   reporter.get_traceback_html()2017-06-25 10:05:53,937:2017-06-25   10:05:53,937:文件   &#34; /home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/views/debug.py" ;,   第316行,在get_traceback_html中2017-06-25 10:05:53,938:c =   上下文(self.get_traceback_data(),use_l10n = False)2017-06-25   10:05:53,938:2017-06-25 10:05:53,938:文件   &#34; /home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/views/debug.py" ;,   第293行,在get_traceback_data中2017-06-25 10:05:53,938:
  &#39; filtered_POST&#39;:self.filter.get_post_parameters(self.request),   2017-06-25 10:05:53,938:2017-06-25 10:05:53,938:文件   &#34; /home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/views/debug.py" ;,   第167行,在get_post_parameters 2017-06-25 10:05:53,938:return   request.POST 2017-06-25 10:05:53,938:2017-06-25 10:05:53,939:文件   &#34; /home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py" ;,   第128行,_get_post 2017-06-25 10:05:53,939:
  self._load_post_and_files()2017-06-25 10:05:53,939:2017-06-25   10:05:53,939:文件   &#34; /home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/http/request.py" ;,   第311行,载于_load_post_and_files 2017-06-25 10:05:53,939:
  self._post,self._files = QueryDict(self.body,   encoding = self._encoding),MultiValueDict()2017-06-25 10:05:53,939:   2017-06-25 10:05:53,940:档案   &#34; /home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/http/request.py" ;,   第397行,在 init 2017-06-25 10:05:53,940:for key,value in   limited_pa​​rse_qsl(query_string,** parse_qsl_kwargs):2017-06-25   10:05:53,940:2017-06-25 10:05:53,940:文件   &#34; /home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/utils/http.py" ;,   line 350,in limited_pa​​rse_qsl 2017-06-25 10:05:53,940:&#39; The   超出GET / POST参数数量

我不太确定如何避免它,我可以更改设置并为此视图专门设置不同的限制吗?或者我可以将所有这些字段作为一个列表提交?如果没有,那么可能是什么解决方案呢?我可以为特定视图指定DATA_UPLOAD_MAX_NUMBER_FIELDS设置吗?提前谢谢。

2 个答案:

答案 0 :(得分:7)

Django的文档指出,设置不应该在设置以外的任何地方进行更改:

https://docs.djangoproject.com/en/1.11/topics/settings/#altering-settings-at-runtime

正如您所提到的,解决方案是在设置中增加DATA_UPLOAD_MAX_NUMBER_FIELDS的大小。祝你好运!

答案 1 :(得分:0)

在 settings.py 中只需增加“DATA_UPLOAD_MAX_NUMBER_FIELDS”值或禁用检查此值,其中默认值为 1000:

例如

# to increase value
DATA_UPLOAD_MAX_NUMBER_FIELDS = 102400

# to disabled check 
DATA_UPLOAD_MAX_NUMBER_FIELDS = None

在以下 url 上检查 Django 文档: https://docs.djangoproject.com/en/3.2/ref/settings/#data-upload-max-number-fields

我希望这有帮助。