Python Django rest框架-解析post()中的键值对

Python Django rest框架-解析post()中的键值对,python,django,django-rest-framework,Python,Django,Django Rest Framework,当用户输入POST API数据时,他们将输入A和B键值对。我想修改post()以满足我的需要。我想在用户单击提交或发布API数据时解析以下内容 在api视图上返回这些字段之前(或当用户单击提交时),是否仍要解析这些字段? 这就是用户试图使用post API发布的内容 [ { "A": "1234", "B": "12345", }, ] 我所做的: views.py class MyModelList(generics.ListCreateAPI

当用户输入POST API数据时,他们将输入A和B键值对。我想修改post()以满足我的需要。我想在用户单击提交或发布API数据时解析以下内容

在api视图上返回这些字段之前(或当用户单击提交时),是否仍要解析这些字段?

这就是用户试图使用post API发布的内容

[
    {
        "A": "1234",
        "B": "12345",
    },
]
我所做的:

views.py

class MyModelList(generics.ListCreateAPIView):
    queryset = MyModel.objects.all()
    serializer_class = MyModeSerializer
    permission_classes = (permissions.IsAuthenticated,)

def post(self, request, *args, **kwargs):
     ##parse A values from key value pair so that value == 1234
     ##parse B values from key value pair so that value == 12345
     return self.create(request, *args, **kwargs)
models.py

class Models(models.Model):
    A = models.CharField(max_length=255, null=False)
    B = models.CharField(max_length=255, null=False)

我想你的意思是发送单个对象,而不是对象列表。因为
ListCreateAPIView
create
函数将只在模型中创建一个对象

因此,如果用户发送包含以下数据的POST请求:

{
    "A": "1234",
    "B": "12345",
}
您可以从
请求.data
字典访问它

def post(self, request, *args, **kwargs):
     A = request.data.get('A', None)
     B = request.data.get('B', None)
     return self.create(request, *args, **kwargs)

如果A或B为None,则表示数据未与请求一起正确发送。

我认为您的意思是发送单个对象,而不是对象列表。因为
ListCreateAPIView
create
函数将只在模型中创建一个对象

因此,如果用户发送包含以下数据的POST请求:

{
    "A": "1234",
    "B": "12345",
}
您可以从
请求.data
字典访问它

def post(self, request, *args, **kwargs):
     A = request.data.get('A', None)
     B = request.data.get('B', None)
     return self.create(request, *args, **kwargs)

如果A或B为None,则表示数据未与请求一起正确发送。

您需要将数据解析为密钥对。试试这个:

class MyModelList(generics.ListCreateAPIView):
    queryset = MyModel.objects.all()
    serializer_class = MyModeSerializer
    permission_classes = (permissions.IsAuthenticated,)

    def post(self, request, *args, **kwargs):
        pairs = request.data()
        for pair in pairs:
            model = Models.objects.create(**pair)
        return Response({"results": "saved"})

您需要将数据解析为密钥对。试试这个:

class MyModelList(generics.ListCreateAPIView):
    queryset = MyModel.objects.all()
    serializer_class = MyModeSerializer
    permission_classes = (permissions.IsAuthenticated,)

    def post(self, request, *args, **kwargs):
        pairs = request.data()
        for pair in pairs:
            model = Models.objects.create(**pair)
        return Response({"results": "saved"})