Django / rest:当我试图选择一个用户时,我得到错误`(1048,"列不能为空")

时间:2017-10-22 12:31:12

标签: python django django-rest-framework

我使用django 1.11.5和python 3.5。

使用rest-framework,我想搜索有uid的患者。

当我尝试只有一个字段的序列化程序时,我收到错误(1048, "Column 'yearofbirth' cannot be null")

我不想保存任何内容,我只是想让所有用户的信息都有给定的uid。

有没有解决方法可以解决这个问题?

我相信这是因为我使用post方法。如何使用浏览器获取而不使用curl

serializers.py

class GetUserSerializer(serializers.ModelSerializer):
    id = serializers.CharField(source='uid')

    class Meta:
        model = User
        fields = ('id', )

views.py

class GetUser(CreateAPIView):
    permission_classes = ()
    serializer_class = GetUserSerializer

    def get(self, request):
        serializer = GetUserSerializer(data=request.data)
        # Check format and unique constraint
        if not serializer.is_valid():
            return Response(serializer.errors, \
                            status=status.HTTP_400_BAD_REQUEST)
        data = serializer.data


        if User.objects.filter(uid = data['id']).exists():
            user = User.objects.get(uid = data['id'])
            resp = {"user":{"uid":user.uid, "firstname":user.firstname, "yearofbirth": user.yearofbirth, \
                            "lastnames": user.lastname, "othernames": user.othernames}}
            return Response(resp, status=status.HTTP_200_OK)

        else:

            resp = {"error": "User not found"}
            return Response(resp, status=status.HTTP_404_NOT_FOUND)

models.py

class User(models.Model):
    uid = models.CharField(max_length=255, unique=True,default="0")
    firstname = models.CharField(max_length=255)
    lastname = models.CharField(max_length=255, blank=True)
    othernames = models.CharField(max_length=255, blank=True)
    yearofbirth = models.SmallIntegerField(validators=[MinValueValidator(1900),
                                           MaxValueValidator(2018)], null = False

1 个答案:

答案 0 :(得分:0)

通过可浏览的API发出GET请求实际上会在幕后进行一些额外的调用,使用不同的方法。如果您的序列化程序无法处理它们,则会导致类似您在此处看到的错误。查看此SO帖子了解更多详情:Django Rest Framework: `get_serializer_class` called several times, with wrong value of request method