'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
但这仍然取决于您如何在请求中传递它。
我是一名正在学习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
但这仍然取决于您如何在请求中传递它。