我想创建多个具有单个外键关系的对象

I want to create multiple objects with single foreign key relation

我需要在一个请求中为一名候选人添加多项技能。现在我收到错误无法将多个实例分配给技能模型

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 创建多个模型实例的方法不同,但此解决方案使用视图集并重写创建方法。

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)

您可以post这样的数据:

[{'candidate': 2, 'skills': 5}, {'candidate': 1, 'skills': 1}]

但要确保技能和候选人 id 存在!