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
}