Получаем ошибку, говорящую, что оценка должна быть экземпляром
в моей модели раздела оценки я определил внешний ключ следующим образом:
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].