我想创建多个具有单个外键关系的对象
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
存在!
我需要在一个请求中为一名候选人添加多项技能。现在我收到错误无法将多个实例分配给技能模型
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
存在!