dict'对象没有'save'属性,POST不工作

0 投票
1 回答
2460 浏览
提问于 2025-04-28 09:24

我正在搭建一个REST网络服务,GET方法看起来运行得不错,但一到POST方法就总是出现错误信息:'dict'对象没有'save'属性

models.py

from django.db import models


class Users(models.Model):
    Fullname = models.CharField(max_length=50)
    Username = models.CharField(max_length=15)
    Password = models.CharField(max_length=8)
    Email = models.CharField(max_length=50, unique=True)
    Type = models.CharField(max_length=5)
    TwitterName = models.CharField(max_length=15, unique=True)
    FacebookName = models.CharField(max_length=15, unique=True)
    CreationDate = models.DateTimeField()

serializer.py

    class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = Users
        fields = ('Fullname', 'Username', 'Email', 'Password', 'Type', 'TwitterName', 'FacebookName')

views.py

@api_view(['GET', 'POST'])
def users_list(request, format=None):
    if request.method == 'GET':
        users = Users.objects.all()
        serializer = UserSerializer(users, many=True)
        return Response(serializer.data)

    elif request.method == 'POST':
        serializer = UserSerializer(request.DATA, many=True)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response(serializer.data, status=status.HTTP_400_BAD_REQUEST)

我在使用PyCharm和Django 1.7

暂无标签

1 个回答

1

如果你想保存POST数据,那么你应该把这些数据传递给data这个参数:

serializer = UserSerializer(data=request.DATA, many=True)
        if serializer.is_valid():
            ... 

我还建议你使用基于类的视图和混入类,这样可以让你的代码更加简洁和短小:

from rest_framework import generics, mixins

class UserList(mixins.ListModelMixin,
               mixins.CreateModelMixin,
               generics.GenericAPIView):

    queryset = Users.objects.all()
    serializer_class = UserSerializer

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

撰写回答