'method' object is not subscriptable 错误发生

'method' object is not subscriptable error occurs

我是一名正在学习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>

试试这个。

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()

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

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

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

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