Объект типа '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): enter image description here

Ответ в моей локальной машине (Response): enter image description here

Что если вы попробуете вместо этого:

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 в вашем клиенте.

Вернуться на верх