python字典更新键';s值
这是我的密码:python字典更新键';s值,python,django-rest-framework,Python,Django Rest Framework,这是我的密码: #...existing code print(serializer.data) if group.member.filter(id=user).exists():#<-- this is true serializer.data['joined'] = True print(1) else: print(0) print(serializer.data) #…现有代码 打印(serializer.data) 如果group.member
#...existing code
print(serializer.data)
if group.member.filter(id=user).exists():#<-- this is true
serializer.data['joined'] = True
print(1)
else:
print(0)
print(serializer.data)
#…现有代码
打印(serializer.data)
如果group.member.filter(id=user.exists():#在django中,Serializer.data
属性返回OrderedDict,它是使用Serializer.\u data
构建的,但返回值不是Serializer.\u data
本身
# In class Serializer(BaseSerializer)
@property
def data(self):
if hasattr(self, 'initial_data') and not hasattr(self, '_validated_data'):
msg = (
'When a serializer is passed a `data` keyword argument you '
'must call `.is_valid()` before attempting to access the '
'serialized `.data` representation.\n'
'You should either call `.is_valid()` first, '
'or access `.initial_data` instead.'
)
raise AssertionError(msg)
if not hasattr(self, '_data'):
if self.instance is not None and not getattr(self, '_errors', None):
self._data = self.to_representation(self.instance)
elif hasattr(self, '_validated_data') and not getattr(self, '_errors', None):
self._data = self.to_representation(self.validated_data)
else:
self._data = self.get_initial()
return self._data
因此,您应该保留返回值的副本,并按如下方式修改该值:
# keep the return value of serializer.data
serialized_data = serializer.data
print(serializer_data)
if group.member.filter(id=user).exists():
serializer_data['joined'] = True
print(1)
else:
print(0)
print(serializer_data)
在django中,Serializer.data
属性返回OrderedDict,它是使用Serializer.\u data
构造的,但返回值不是Serializer.\u data
本身
# In class Serializer(BaseSerializer)
@property
def data(self):
if hasattr(self, 'initial_data') and not hasattr(self, '_validated_data'):
msg = (
'When a serializer is passed a `data` keyword argument you '
'must call `.is_valid()` before attempting to access the '
'serialized `.data` representation.\n'
'You should either call `.is_valid()` first, '
'or access `.initial_data` instead.'
)
raise AssertionError(msg)
if not hasattr(self, '_data'):
if self.instance is not None and not getattr(self, '_errors', None):
self._data = self.to_representation(self.instance)
elif hasattr(self, '_validated_data') and not getattr(self, '_errors', None):
self._data = self.to_representation(self.validated_data)
else:
self._data = self.get_initial()
return self._data
因此,您应该保留返回值的副本,并按如下方式修改该值:
# keep the return value of serializer.data
serialized_data = serializer.data
print(serializer_data)
if group.member.filter(id=user).exists():
serializer_data['joined'] = True
print(1)
else:
print(0)
print(serializer_data)
什么是类型(serializer.data)
,它可能不是一个dict。如果在打印(1)
之前打印serializer.data
会怎么样?什么是类型(serializer.data)
,它可能不是一个dict。如果在打印(1)
之前打印serializer.data
会怎么样?回答得很好。也真的帮助我理解,谢谢。@Sayse谢谢,我根据你的评论更新了答案。回答得很好。也真的帮助我理解,谢谢。@Sayse谢谢,我根据你的评论更新了答案。