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