Django Rest Framework-解析post()中的键值对

时间:2019-02-19 17:11:29

标签: python django django-rest-framework

当用户输入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)

2 个答案:

答案 0 :(得分:0)

我认为您是要发送单个对象,而不是对象列表。因为ListCreateAPIView的{​​{1}}函数将仅在模型中创建一个对象。

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

create

您可以从{ "A": "1234", "B": "12345", } 字典中访问它。

request.data

如果A或B为“无”,则表示该数据未随请求正确发送。

答案 1 :(得分:0)

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

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"})