Получаем ошибку, говорящую, что оценка должна быть экземпляром

в моей модели раздела оценки я определил внешний ключ следующим образом:

assessment_id = models.ForeignKey(to=Assessment, on_delete=models.CASCADE,
                                      related_name='section_assessment_mapping', null=False, blank=False,
                                      help_text="The assessment associated with this section.")

это указывает на id модели оценки, который является первичным ключом.

В сериализаторе раздела оценки я определил идентификатор оценки следующим образом: assessment_id = serializers.UUIDField(required=True) вот метод create сериализатора:

    def create(self, validated_data):
        print('validdata',validated_data)
        print(validated_data.get('assessment_id'))
        section_obj = AssessmentSection.objects.create_with_defaults(**validated_data)
        return section_obj

и это раздел создания api для оценки:

    def create(self, request, *args, **kwargs):
        try:
            serializer = AssessmentSectionSerializer(data=request.data)
            if serializer.is_valid(raise_exception=True):
                serializer.save()
                return Response(data=serializer.data, status=status.HTTP_201_CREATED)
        except ValidationError as e:
            service_logger.error(str(e))
            return Response({'error': True, 'message': e.args[0]}, status=status.HTTP_400_BAD_REQUEST)
        except Exception as e:
            service_logger.error(str(e))
            raise StandardizedException(error_status=True, error_obj=e, status_code=status.HTTP_400_BAD_REQUEST)

Теперь, когда я обращаюсь к API с полезной нагрузкой, содержащей assessment_id, имеющий некоторый действительный идентификатор оценки, который присутствует в БД, он выдает эту ошибку:

Cannot assign \"UUID('7025deca-afb8-4ad3-93b8-6035599bcf6e')\": \"AssessmentSection.assessment_id\" must be a \"Assessment\" instance."
}

Я пробовал несколько подходов, но они не работают. Мне просто нужно хранить идентификатор оценки в таблице с информацией о разделе. Заранее спасибо.

пробовал использовать source=assesment.id в поле сериализатора, но ничего не вышло.

Переименуйте ForeignKey в assessment:

class MyModel(models.Model):
    assessment = models.ForeignKey(
        to=Assessment,
        on_delete=models.CASCADE,
        related_name='section_assessment_mapping',
        null=False,
        blank=False,
        help_text='The assessment associated with this section.',
    )

А ForeignKey [Django-doc] в Django обращается к объекту, на который он ссылается, и вы можете получить доступ к fieldname_idполю для этого поля в целевой модели, которую он использует.

См. также эту статью, которую я написал об этом [django-antipatterns].

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