Data._mutable= True в Django rest framework
Я видел это много раз и искал везде, но не мог понять, что это означает и обязательно ли это? Я не использовал этот data._mutable = True or False в своем коде раньше и не уверен, должен ли я его использовать или нет.
Фрагмент кода выглядит примерно так.
def update(self, request, *args, **kwargs):
instance = self.get_object()
data = request.data
if data.get("something") == "null":
data._mutable = True
data["something"] = None
data._mutable = False
Почему нам нужно присвоить True или False приватному атрибуту _mutable объекта данных???
If you use as parser a FormParser [drf-doc] or MultiPartParser [drf-doc], or another parser that parses to a QueryDict [Django-doc], then the QueryDict is by default immutable. That means that it will reject any changes to it, so you can not add, remove or edit key-value pairs.
By setting the ._mutable attribute, you can prevent this from raising errors, and thus mutate the QueryDict. But it is not good practice, since it is not documented that you can make the QueryDict mutable by setting the ._mutable attribute to True. Usually you work with .copy() [Django-doc] which will return a mutable deep copy, so:
def update(self, request, *args, **kwargs):
instance = self.get_object()
data = request.data
if data.get('something') == 'null':
data = data.copy()
data['something'] = None
# …