如何使用JSONField将数据提供给序列化程序



我有带有JSONField 的模型和序列化程序

class Profile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
detail = models.JSONField(default=dict)
def __str__(self):
return self.user.username
class ProfileSerializer(ModelSerializer):
class Meta:
model = m.Profile
fields = '__all__'

然后,我想将数据设置为序列化程序类

然而,serializer.is_valid()是如何失败的。

我已经测试了两个petterndata1data2

temp_data = {"data":"test"}
data1 = {"detail":temp_data}   # test_data1
data2 = {"detail":json.dumps(temp_data)} # test_data2 
print(data1)  # {'detail': {'data': 'test'}}
print(data2)  # {'detail': '{"data": "test"}'}
instance = self.get_object()

serializer = self.get_serializer(instance,data = data1) # or data2
if serializer.is_valid(): 
# serializer
else:
print("is_valid failed")

我应该给这个序列化程序什么数据?

有什么方法可以调试is_valid((吗?

您以正确的方式提供数据,但由于您正在部分更新,您需要再传递一个参数:

serializer = self.get_serializer(instance, data=data1, partial=True)

要调试is_valid方法,您可以像.is_valid(raise_exception=True)一样从中抛出异常,在else块中打印serializer.errors以打印确切的错误。有关验证的更多信息,请参阅文档。

相关内容

最新更新