Как передать данные в сериализатор с помощью 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() faild.

Я протестировал два петтерна 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()?

Вы правильно передаете данные, но поскольку вы обновляете их частично, вам нужно передать еще один параметр:

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

Для отладки метода is_valid вы можете либо выбрасывать из него исключения типа .is_valid(raise_exception=True); или в вашем коде, выводить serializer.errors в блоке else для вывода точных ошибок. Более подробную информацию о валидации можно найти в документации.

Вернуться на верх