Я хочу создать несколько объектов с одним отношением внешнего ключа
Мне нужно добавить несколько навыков для одного кандидата в одном запросе. Сейчас я получаю ошибку cannot assign multiple instances to skill models
class CandidateSkill(models.Model):
candidate = models.ForeignKey(Candidate, on_delete=models.CASCADE,related_name="skills",)
skills = models.ForeignKey("jobs.Skill", on_delete=models.CASCADE)
class CandidateSkillList(generics.ListCreateAPIView):
serializer_class = CandidateSkillSerializer
queryset = CandidateSkill.objects.all()
----------
class CandidateSkillSerializer(serializers.ModelSerializer):
class Meta:
model = CandidateSkill
fields = ["id", "candidate", "skills"]
В файле models.py измените отношения многие-ко-многим, тогда вы сможете легко добавить несколько экземпляров
skills = models.ManyToManyField("jobs.Skill")
Существуют различные способы создания нескольких экземпляров модели с помощью Django Rest Framework, но это решение использует наборы представлений и переопределяет метод create.
from rest_framework import status, viewsets
from rest_framework.response import Response
class ThingViewSet(viewsets.ModelViewSet):
# This view code provides both list and item create functionality
queryset = CandidateSkill.objects.all()
serializer_class = CandidateSkillSerializer
def create(self, request, *args, **kwargs):
# If the data is a list then many = True else many = False
serializer = self.get_serializer(data=request.data, many=isinstance(request.data,list))
# Raise an exception if data is not valid
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
# Get the headers infos
headers = self.get_success_headers(serializer.data)
# Return the response
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
Вы можете разместить данные следующим образом :
[{'candidate': 2, 'skills': 5}, {'candidate': 1, 'skills': 1}]
Но убедитесь, что навыки и кандидат id
существуют !