【问题标题】:'method' object is not subscriptable error occurs'method' 对象不可下标错误发生
【发布时间】:2021-08-12 17:10:35
【问题描述】:

我是一名正在学习Janggo的学生。我想将所有 value_code 本身作为一个 getlist 获取,但它不起作用。我怎样才能在getlist上得到它?我想得到一个 request.POST.getlist,但我不知道如何使用表单来获取它。我应该如何修改它?非常感谢您的帮助。

错误:

TypeError at /join/join_create/1/
'method' object is not subscriptable
Request Method: POST
Request URL:    http://127.0.0.1:8000/join/join_create/1/
Django Version: 3.1.5
Exception Type: TypeError
Exception Value:    
'method' object is not subscriptable
Exception Location: C:\zeronine_project (5)\join\views.py, line 37, in join_create
Python Executable:  D:\anaconda3\envs\vnv_zn\python.exe
Python Version: 3.7.6
Python Path:    
['C:\\zeronine_project (5)',
 'D:\\anaconda3\\envs\\vnv_zn\\python37.zip',
 'D:\\anaconda3\\envs\\vnv_zn\\DLLs',
 'D:\\anaconda3\\envs\\vnv_zn\\lib',
 'D:\\anaconda3\\envs\\vnv_zn',
 'D:\\anaconda3\\envs\\vnv_zn\\lib\\site-packages']
Server time:    Fri, 13 Aug 2021 02:21:20 +0900
Traceback Switch to copy-and-paste view
D:\anaconda3\envs\vnv_zn\lib\site-packages\django\core\handlers\exception.py, line 47, in inner
                response = get_response(request) …
▶ Local vars
D:\anaconda3\envs\vnv_zn\lib\site-packages\django\core\handlers\base.py, line 181, in _get_response
                response = wrapped_callback(request, *callback_args, **callback_kwargs) …
▶ Local vars
C:\zeronine_project (5)\join\views.py, line 37, in join_create
                    element.value_code = request.POST.getlist['value_code'] …
▶ Local vars

views.py

        if request.method == "POST":
            form = ElementForm(request.POST)

            if form.is_valid():
                element = Element()
                element.designated_code = Designated.objects.get(product_code=id)
                element.value_code = request.POST.getlist['value_code']
                element.save()

            else:
                element = Element()
                element.designated_code = Designated.objects.get(product_code=id)
                element.value_code = None
                element.save()

forms.py

 class ElementForm(forms.Form):
    value_code = forms.ModelChoiceField(error_messages={'required': "옵션을 선택하세요."}, label="옵션", queryset=Value.objects.all())

html

<form method="POST" action="{% url 'zeronine:join_create' id=product.product_code %}">
    <div class="form-group row" style="margin-top: -5px">
        <label for="optionSelect" class="col-sm-6 col-form-label"><b>옵션</b></label>
            <div class="col-sm-6" style="margin-left: -90px;">
                 <select type="text" class="form-control" name="value_code" id="optionSelect" value="{{ form.value_code }}">
                     <option value="none">옵션을 선택하세요.</option>
                        {% for option in option_object %}
                           {% if option.option_code.option_code.option_code == value.option_code %}
                               {%if option.product_code == product %}
                                   <optgroup label="{{option.name}}">
                        {% for value in value_object %}
                           {% if value.option_code.option_code == option.option_code %}
                               {%if value.product_code == product %}
                                     <option data-price="{{value.extra_cost}}"value="{{value.value_code}}" multiple='multiple'>{{value.name}} (+{{value.extra_cost}}원)</option>
                               {% endif %}
                           {% endif %}
                        {% endfor %}
                               {% endif %}
                           {% endif %}
                        {% endfor %}
                                 </optgroup>
                </select>

【问题讨论】:

  • 试试这个request.POST.getlist('value_code[]')
  • @boyenec 出现以下错误:无法分配“[]”:“Element.value_code”必须是“Value”实例。
  • 你可能会在你的views.py中添加'element.instance.value_code`
  • @boyenec 仍然出现同样的错误。我改了方法,写成如下,你看看是不是这个有问题?
  • @boyenec for value_code in request.POST.getlist('value_code'): element = Element() element.designated_code = Designated.objects.get(product_code=id) element.value_code = value_code 元素。保存()

标签: django django-models django-views django-forms django-templates


【解决方案1】:

试试这个。

if request.method == "POST":
            form = ElementForm(request.POST or None)
            if form.is_valid():
                form.instance.designated_code = Designated.objects.get(product_code=id)
                form.instance.value_code = request.POST.getlist['value_code']
                form.save()

            else:
                form.instance.designated_code = Designated.objects.get(product_code=id)
                form.instance.value_code = None
                form.save()

【讨论】:

    【解决方案2】:

    用法应该是.getlist('value_code')。而且由于您获得了一个列表,因此您需要检查将要使用哪个元素。

    例如,如果您希望使用第一项:

    value_codes = request.POST.getlist('value_code')
    element.value_code = value_codes[0] if value_codes else None
    

    但这一切仍然取决于您如何在请求中传递它。

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 2012-04-04
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多