Как передать данные в сериализатор с помощью 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 для вывода точных ошибок. Более подробную информацию о валидации можно найти в документации.