Сериализация вложенного 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)
Вернуться на верх