Почему я не могу добавить объект в поле rest_framework

Я хочу добавить некоторые объекты с помощью сериализаторов rest_framework, но я получаю эту ошибку от сериализатора. Я вижу у некоторых людей то же самое, но я не знаю, как исправить это в моей ситуации.


{
    "user": [
        "Incorrect type. Expected pk value, received str."
    ]
}

Конечно, я прочитал документацию о сериализаторах и отношениях, но я все еще не понимаю... новичок в django

Вот мои модели


class UserData(AbstractUser):

    username = None
    name = models.CharField(max_length=100, unique=True)
    email = models.EmailField(max_length=100, unique=True)
    date_joined = models.DateTimeField(auto_now_add=True)
    pseudo = models.CharField(max_length=200,unique=True)
    hashtag = models.CharField(max_length=200, unique=True)
    is_admin = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    
    objects = UserManager()
    
    USERNAME_FIELD = "pseudo"
    REQUIRED_FIELDS = ['name','hashtag','email']

    def __str__(self):
        return self.name

class Pebbles(models.Model):
    image = models.CharField(max_length=200)
    user = models.ForeignKey(UserData, related_name="pebbles",on_delete=models.CASCADE)

    class Meta():
        unique_together = ["id","user"]

Я могу получить список камешков из этого представления, это работает.


class PebblesView(generics.ListCreateAPIView):
    permission_classes = [IsAuthenticated]
    authentication_classes = [JWTAuthentication]
    serializer_class = PebblesSerializer

    def get_queryset(self):
        return Pebbles.objects.all()
    
    def create(self, request):
        serializer = PebblesSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response(serializer.data)

Я могу зарегистрировать пользователя с помощью моего UserSerializer. У меня есть такая же логика для гальки, но она не работает. В оболочке Django я могу создать шарики вот так.

class UserSerializer(serializers.ModelSerializer):
    pebbles = serializers.StringRelatedField(many=True)

    class Meta:
        model = UserData
        fields = ["id", "pseudo", "hashtag","email", "name", "password","pebbles"]

    def create(self, validated_data):
        user = UserData.objects.create(
            email=validated_data['email'],
            name=validated_data['name'],
            pseudo=validated_data['pseudo'],
            hashtag=validated_data['hashtag']
        )
        user.set_password(validated_data['password'])
        user.save()
        return user

class PebblesSerializer(serializers.ModelSerializer):

    class Meta:
        model = Pebbles
        fields = ["id","image","user"]

    def create(self, request):
        pebbles = Pebbles.objects.create(
            image=request['image'],
            user=UserData.objects.get(pseudo=request['user'])
        )
        pebbles.save()
        return pebbles

Может кто-нибудь дать мне подсказку?

Я не понимал, что Django rest framework зашел так далеко в автоматизации.

request["user"] 

В нем уже содержится объект UserData, так что искать его не нужно. И я допускаю ошибку, используя псевдополе вместо id.

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