Сериализация вложенного JSON в модели Django
как создать вложенную структуру из вложенного JSON? Я хочу, чтобы у моего Hobby был ForeignKey к профилю. Это не может быть так сложно, но я действительно не понимаю ошибку. Он даже создает объекты и сохраняет их в моей базе данных, но все равно говорит, что не находит поле.
Я получаю следующую ошибку с моим кодом:
AttributeError: Got AttributeError when attempting to get a value for field `description` on serializer `HobbySerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `RelatedManager` instance.
Original exception text was: 'RelatedManager' object has no attribute 'description'.
serializers.py:
class HobbySerializer(serializers.ModelSerializer):
class Meta:
model = Hobby
fields = ["name", "description"]
class ProfileSerializer(serializers.ModelSerializer):
user_hobby23 = HobbySerializer(many=False)
class Meta:
model = Profile
fields = ["testfield1", "display_name", "mobile", "address", "email", "dob", "user_hobby23"]
def create(self, validated_data):
user_hobby_data = validated_data.pop('user_hobby23')
profile_instance = Profile.objects.create(**validated_data)
Hobby.objects.create(user=profile_instance, **user_hobby_data)
return profile_instance
models.py:
class Profile(models.Model):
display_name = models.CharField(max_length=30)
mobile = models.IntegerField()
address = models.TextField()
email = models.EmailField()
dob = models.DateField()
photo=models.FileField(upload_to='profile/',null=True,blank=True)
status = models.IntegerField(default=1)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
testfield1 = models.TextField(null=True)
class Hobby(models.Model):
user=models.ForeignKey(Profile,on_delete=models.CASCADE,related_name='user_hobby23',null=True)
name = models.CharField(max_length=30)
description = models.TextField()
status = models.IntegerField(default=1)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
views.py:
class ProfileViewset(viewsets.ModelViewSet):
queryset = Profile.objects.all()
serializer_class = ProfileSerializer
parser_classes = [PlainTextParser]
http_method_names = ['get','post','retrieve','put','patch']
def create(self, request, *args, **kwargs):
return super().create(request, *args, **kwargs)
JSON, который я отправляю, выглядит следующим образом:
{
"testfield1":"testtext",
"user_hobby23":
{
"name":"Movie",
"description":"Love to watch movie"
}
,
"display_name":"Test_user",
"mobile":1234213,
"address":"testerAdress",
"email":"testeremail@test.de",
"dob":"2020-11-16"
}
Буду очень признателен за помощь
Итак, исправление выглядит следующим образом: Добавить write_only=True.
user_hobby23 = HobbySerializer(many=False, write_only=True)