如何使用 django rest 视图集执行多个插入?
How to perform multiple insertion using django rest viewsets?
我正在研究此 api,用户可以在其中 select 多种语言并标记每种语言的熟练程度。型号如下
class UserLanguage(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
language = models.ForeignKey(Language, on_delete=models.CASCADE)
proficiency = models.DecimalField(max_digits=4, decimal_places=2)
class Meta:
db_table = "user_language"
序列化器看起来像:
class UserLanguageSerializer(serializers.ModelSerializer):
class Meta:
model = UserLanguage
fields = '__all__'
我做了如下看法
class UserLanguageViewSet(viewsets.ModelViewSet):
queryset = UserLanguage.objects.all()
serializer_class = UserLanguageSerializer
该代码适用于
这样的请求
{
"proficiency": "04.00",
"user": 1,
"language": 1
}
我希望 api 接受这样的列表:
[
{
"proficiency": "05.00",
"user": 1,
"language": 1
},
{
"proficiency": "04.00",
"user": 1,
"language": 1
}]
对于列表中的每个项目,我想在 'user_language' table 中创建一个新行。
我做的对吗?如果没有告诉我正确的方法。
我应该如何修改我的模型、序列化器或视图来实现这一点?
不知道上面的请求格式对不对。如果没有请告诉我。
谢谢。
您想重写创建方法以便序列化程序接受 many=True。
class UserLanguageViewSet(viewsets.ModelViewSet):
queryset = UserLanguage.objects.all()
serializer_class = UserLanguageSerializer
def create(self, request):
serializer = UserLanguageSerializer(data=request.data, many=True)
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)
我正在研究此 api,用户可以在其中 select 多种语言并标记每种语言的熟练程度。型号如下
class UserLanguage(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
language = models.ForeignKey(Language, on_delete=models.CASCADE)
proficiency = models.DecimalField(max_digits=4, decimal_places=2)
class Meta:
db_table = "user_language"
序列化器看起来像:
class UserLanguageSerializer(serializers.ModelSerializer):
class Meta:
model = UserLanguage
fields = '__all__'
我做了如下看法
class UserLanguageViewSet(viewsets.ModelViewSet):
queryset = UserLanguage.objects.all()
serializer_class = UserLanguageSerializer
该代码适用于
这样的请求{
"proficiency": "04.00",
"user": 1,
"language": 1
}
我希望 api 接受这样的列表:
[
{
"proficiency": "05.00",
"user": 1,
"language": 1
},
{
"proficiency": "04.00",
"user": 1,
"language": 1
}]
对于列表中的每个项目,我想在 'user_language' table 中创建一个新行。
我做的对吗?如果没有告诉我正确的方法。
我应该如何修改我的模型、序列化器或视图来实现这一点?
不知道上面的请求格式对不对。如果没有请告诉我。
谢谢。
您想重写创建方法以便序列化程序接受 many=True。
class UserLanguageViewSet(viewsets.ModelViewSet):
queryset = UserLanguage.objects.all()
serializer_class = UserLanguageSerializer
def create(self, request):
serializer = UserLanguageSerializer(data=request.data, many=True)
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)