【问题标题】:How to give the data to serializer with JSONField如何使用 JSONField 将数据提供给序列化程序
【发布时间】:2022-11-01 21:51:24
【问题描述】:

我有 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() 失败了。

我已经测试了两个 pettern data1 data2

    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() 吗?

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

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

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

    要调试is_valid 方法,您可以从中抛出异常,例如.is_valid(raise_exception=True)或者在您的代码中,在 else 块中打印 serializer.errors 以打印确切的错误。有关验证的更多信息,请参见 documentation

    【讨论】:

      猜你喜欢
      • 2018-04-25
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      • 2020-08-15
      相关资源
      最近更新 更多