Django Rest Framework значение id отправляется, но принимается как null

Возникла проблема, когда я пытаюсь установить interest_category. Вот мой текущий код.

Сериализатор

class ProjectsSerializer(serializers.ModelSerializer):

    interest_category = serializers.StringRelatedField()

    class Meta:
        model = Project
        read_only_fields = (
            'created_by',
            'created_at',
            'updated_at',
        ),
        fields = (
            'project_title',
            'project_description',
            'interest_category',
        )

Модель

class Project(models.Model):
    project_title = models.CharField(max_length=255)
    project_description = models.TextField(max_length=1500)
    interest_category = models.ForeignKey(Interests, on_delete=models.CASCADE)
    created_by = models.ForeignKey(User, related_name='projects', on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now_add=True)

Виды

class ProjectViewSet(viewsets.ModelViewSet):
    serializer_class = ProjectsSerializer
    queryset = Project.objects.order_by('-created_at')
    
    def perform_create(self, serializer):
        serializer.save(created_by=self.request.user)

Вот отправляемые данные

{
    "project_title": "Test",
    "project_description": "Test1",
    "interest_category": 2
}

Вот принимаемые данные

(35, Test, Test1, 2022-09-22 02:11:54.342202+00, 2022-09-22 02:11:54.342202+00, 1, null).

Я могу отправить данные без ошибки null, когда я НЕ использую interest_category = serializers.StringRelatedField() в сериализаторе.

Есть идеи, почему interest_category показывает null и почему он не отправляется и/или не принимается правильно при использовании serializers.StringRelatedField()?

А если это из-за StringRelatedField, есть ли лучший способ получить имя при передаче ID? Во фронтенде я передаю ID как значение.

Вместо использования interest_category = serializers.StringRelatedField() поставьте interest_category = serializers.IntegerField(write_only=True), поскольку StringRelatedField может быть использовано для представления цели отношения с помощью его метода __str__. Где IntegerField представление Целое число.

потому что вы отправляете целочисленное значение в данных :

{
    "project_title": "Test",
    "project_description": "Test1",
    "interest_category": 2
}
Вернуться на верх