Объект типа 'NoneType' не имеет len() ошибка, не могу решить ее
Итак, я создал api, который выполняет некоторую функциональность на пост-запросе и отправляет ответ обратно. Я протестировал его на своей локальной машине, и он работает идеально, как и предполагалось. Но на сервере он показывает эту ошибку.
[Wed Aug 10 16:11:08.124324 2022] File "/var/www/html/caremigration/careapi/views.py", line 3767, in createSalesOrder
[Wed Aug 10 16:11:08.124324 2022] for i in range(len(request.data.get('materials'))):
[Wed Aug 10 16:11:08.124328 2022] TypeError: object of type 'NoneType' has no len()
Я предоставил все необходимые детали, а также доказательство того, что он отлично работает на моей локальной машине. Пожалуйста, помогите мне.
Views.py
Объект запроса выглядит следующим образом:
{
"internal_sale_order": "1",
"plant": "Z100",
"customer_no": "100538",
"customer_name": "",
"distribution_channel": "ZZ",
"division": "ZZ",
"sorg": "Z100",
"lr_no": "",
"truck_no": "",
"truck_type": "",
"milk_run": "",
"permit_no": "",
"permit_date": "",
"trasnporter": "",
"materials": [
{
"si_no": "1",
"MAT_desc": {
"item": "Ventilation, complete",
"matname": "SCRAP-01",
"mat_id": "SCRAP-01"
},
"quantity": "0",
"MAT_code": "SCRAP-01",
"description": "",
"price": "0",
"total": "0",
"Mat_name": "",
"edit": false
}
]
}
Ответ на моей локальной машине (перед POST):
Ответ в моей локальной машине (Response):
Что если вы попробуете вместо этого:
for i in range(len(request.GET['materials'])):
?
request.data.get('materials')
возвращает None
, если materials
не было в POST-запросе. None
нельзя использовать с методом len()
, поэтому вы получите ошибку.
Предлагаю добавить значение по умолчанию в вызов метода get()
:
for i in range(len(request.data.get('materials', []))):
# ...
Это позволит избежать ошибки, если "материалы" отсутствуют в запросе.
Вы сами решаете, нужно ли выдавать ошибку, если ключ "materials" отсутствует в запросе.
Подводя итог, суть проблемы в том, что вы не передаете "материалы" в POST-запросе. Вы должны понять, почему это так. Мой лучший совет - использовать отладчик и проинспектировать объект запроса в методе view. Убедитесь, что вы используете метод POST в вашем клиенте.