fix: prevent QueryDict conversion breaking form data for non-admin users
Problem: Regular users couldn't create requests while admins could Root cause: to_internal_value() used dict(QueryDict) which converts all values to lists, breaking validation Solution: - For QueryDict: use _mutable flag to modify in-place - For regular dict: use dict() conversion as before - Avoids ['value'] instead of 'value' conversion This fixes 400 errors for non-admin users when creating requests with multipart/form-data.
This commit is contained in:
parent
895c019592
commit
ba0aaccfd8
@ -265,11 +265,22 @@ class RequestWriteSerializer(serializers.ModelSerializer):
|
||||
dict[str, Any]: Преобразованные данные для дальнейшей валидации.
|
||||
"""
|
||||
if not self._is_power():
|
||||
# data может быть QueryDict — сделаем копию как обычный dict
|
||||
data = dict(data)
|
||||
data.pop("employee", None)
|
||||
data.pop("status", None)
|
||||
data.pop("approver", None)
|
||||
# ВАЖНО: data может быть QueryDict из DRF
|
||||
# dict(QueryDict) превращает все значения в списки!
|
||||
# Используем _mutable для безопасного удаления полей
|
||||
if hasattr(data, '_mutable'):
|
||||
# Это QueryDict, делаем его mutable
|
||||
data._mutable = True
|
||||
data.pop("employee", None)
|
||||
data.pop("status", None)
|
||||
data.pop("approver", None)
|
||||
data._mutable = False
|
||||
else:
|
||||
# Обычный dict
|
||||
data = dict(data)
|
||||
data.pop("employee", None)
|
||||
data.pop("status", None)
|
||||
data.pop("approver", None)
|
||||
|
||||
return super().to_internal_value(data)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user