使用postman批量创建的Django POST方法

kd3sttzy  于 2022-11-07  发布在  Postman
关注(0)|答案(1)|浏览(179)

我在django的views.py中有POST方法来创建数据库中的条目我可以使用postman创建单个条目,但不能使用postman创建批量条目有人能帮忙吗?

模型.py文件

from django.db import models

class Users(models.Model):
    user = models.CharField(max_length=50,default='')
    function = models.CharField(max_length=50,default='')
    department = models.CharField(max_length=50,default='')
    logon = models.CharField(max_length=50,default='')

    def __str__(self):
        return self.user+" - Last_Logon: "+self.logon

    class Meta:
        ordering = ('id',)

序列化程序.py文件

from rest_framework import serializers
from activities.models import Users

class UsersSerializer(serializers.ModelSerializer):

    class Meta:
        model = Users
        fields = ('id', 'user', 'function', 'department', 'logon')

views.py文件带有GET、POST、PUT、DELETE,从这个文件中POST方法只创建一个条目

from django.shortcuts import render
from django.http.response import JsonResponse
from rest_framework.parsers import JSONParser
from rest_framework import status
from activities.models import Users
from activities.serializers import UsersSerializer
from rest_framework.decorators import api_view
@api_view(['GET', 'POST'])
def users_list(request):
    if request.method == 'GET':
        users = Users.objects.all()

        user = request.GET.get('user', None)
        if user is not None:
            users = users.filter(user__icontains=user)

        users_serializer = UsersSerializer(users, many=True)
        return JsonResponse(users_serializer.data, safe=False)
        # 'safe=False' for objects serialization

    elif request.method == 'POST':
        users_data = JSONParser().parse(request)
        users_serializer = UsersSerializer(data=users_data)
        if users_serializer.is_valid():
            users_serializer.save()
            return JsonResponse(users_serializer.data, status=status.HTTP_201_CREATED)
        return JsonResponse(users_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

@api_view(['GET', 'PUT', 'DELETE'])
def users_detail(request, pk):
    try:
        users = Users.objects.get(pk=pk)
    except Users.DoesNotExist:
        return JsonResponse({'message': 'The user does not exist'}, status=status.HTTP_404_NOT_FOUND)

    if request.method == 'GET':
        users_serializer = UsersSerializer(users)
        return JsonResponse(users_serializer.data)

    elif request.method == 'PUT':
        users_data = JSONParser().parse(request)
        users_serializer = UsersSerializer(users, data=users_data)
        if users_serializer.is_valid():
            users_serializer.save()
            return JsonResponse(users_serializer.data)
        return JsonResponse(users_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    elif request.method == 'DELETE':
        users.delete()
        return JsonResponse({'message': 'User was deleted successfully!'}, status=status.HTTP_204_NO_CONTENT)

网址.py文件

from django.urls import re_path
from activities import views

urlpatterns = [
    re_path(r'^api/activities$', views.users_list),
    re_path(r'^api/activities/(?P<pk>[0-9]+)$', views.users_detail),
]

如果我在用户序列化程序中设置了many=True,则POST方法的UsersSerializer(data=users_data,many=True)
在postman中,对于发送单个条目,出现此错误

对于发送多个条目,收到此错误

vcirk6k6

vcirk6k61#

对于UsersSerializer(data=users_data, many=True),您必须发送json对象列表

[
    {
        "User": "user1",
        "function": "t",
        "deportment": "t",
        "logon": "23...."
    }, 
    {
        "User": "user1",
        "function": "t",
        "deportment": "t",
        "logon": "23...."
    }
]

并且对于用户UsersSerializer(data=users_data)
您可以使用send a query参数将序列化程序拆分为url和in view函数

if request.GET.get('bulk'):
    serializer = UsersSerializer(data=users_data, many=True)
else:
    serializer = UsersSerializer(data=users_data)

相关问题