如何使用 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)