Почему я не могу добавить объект в поле 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.