Это сообщение имеет обновление ниже.
В настоящее время у меня есть эти две модели.Я пытаюсь создать работу, используя CreateAPIView
.Прежде, чем я покажу вид, вот мои модели
class modelJobCategory(models.Model):
description = models.CharField(max_length=200, unique=True)
other = models.CharField(max_length=200, unique=False , blank=True , null=True)
class modelJob(models.Model):
category = models.ManyToManyField(modelJobCategory,null=True,default=None,blank=True)
description = models.CharField(max_length=200, unique=False)
Эти два - мои сериализаторы
class Serializer_CreateJobCategory(ModelSerializer):
class Meta:
model = modelJobCategory
fields = [
'description',
]
class Serializer_CreateJob(ModelSerializer):
class Meta:
model = modelJob
category = Serializer_CreateJobCategory
fields = [
'category',
'description',
]
def create(self, validated_data):
job = modelJob.objects.create(user=user,category=?,...) #How to get category ?
return job
Теперь это мой взгляд
class CreateJob_CreateAPIView(CreateAPIView):
serializer_class = Serializer_CreateJob
queryset = modelJob.objects.all()
def post(self, request, format=None):
serializer = Serializer_CreateJob(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Сейчас я прохожуследующий JSON
{
"category" :{
"description": "Foo"
},
"description" : "World"
}
Однако я получаю исключение
{
"category": [
"Incorrect type. Expected pk value, received str."
]
}
Я столкнулся с тем же вопросом здесь , и там упоминается, что мне нужно определить поле слага, котороеЯ не уверен, где.Любое предложение о том, как я могу это исправить?
Обновление:
Так что мой сериализатор задания Job теперь выглядит следующим образом, но возвращает ошибку
Получена ошибка AttributeError при попытке получить значение для поля category
на сериализаторе Serializer_CreateJob
.Поле сериализатора может иметь неправильное имя и не соответствовать ни одному атрибуту или ключу в экземпляре modelJob
.Исходный текст исключения был: объект «ManyRelatedManager» не имеет атрибута «описание».
class Serializer_CreateJob(ModelSerializer):
category = serializers.CharField(source='category.description')
class Meta:
model = modelJob
category = Serializer_CreateJobCategory()
fields = [
'category',
'description',
]
def create(self, validated_data):
category_data = validated_data.pop('category')
category = modelJobCategory.objects.get(description=category_data['description'])
job = modelJob.objects.create(description=validated_data["description"])
job.category.add(category)
job.save()
return job
Есть предложения о том, как я могу это исправить сейчас?