DRF разбирает массив чисел как строковый массив
Когда я делаю POST-запрос из JavaScript к бэкенду Django Rest Framework, мой массив чисел интерпретируется как список строк на бэкенде, что вызывает эту ошибку:
cargo: ["Incorrect type. Expected pk value, received str."]
Вот как я делаю запрос на JavaScript:
const data = new FormData();
data.append("cargo", JSON.stringify([1, 2]));
fetch(url, {method: "POST", body: data}).then(//<more code>
В моем сериализаторе Django Rest Framework я определяю поле cargo следующим образом:
cargo = serializers.PrimaryKeyRelatedField(
many=True, queryset=models.CustomCargo.objects.all()
)
Я отправляю массив чисел, но DRF думает, что это массив строк, поэтому я получаю ошибку, потому что он ожидает целые числа (PrimaryKeyRelatedField). Мне нужно использовать multipart/form-data, потому что я отправляю файл, поэтому я не могу использовать application/json, который работает. Есть ли способ исправить это в коде JavaScript (я бы предпочел не преобразовывать строки в целые числа на бэкенде)?
В итоге я решил эту проблему, добавив каждый элемент массива в FormData
отдельно в виде строк:
[1, 2].forEach((cargo) => data.append("cargo", cargo.toString()));
Если у кого-то есть понимание, почему это работает, пожалуйста, поделитесь.