我正在使用 django 1.11.5
和 python 3.5。
使用 rest-framework
,我想搜索具有 uid
的患者。
当我尝试使用只有一个字段的序列化程序时,我收到错误消息 The
fieldsoption must be a list or tuple or "__all__"。得到了 str.
.
有什么解决方案可以只用一个字段来搜索用户吗?
序列化器.py
class GetUserSerializer(serializers.ModelSerializer):
id = serializers.CharField(source='uid')
class Meta:
model = User
fields = ('id')
View .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)
模型.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
最佳答案
您需要在字段选项中指定一个元组:
fields = ('id', )
如果不添加逗号 ,
python 会将 ('id')
视为字符串。这就是您在错误消息中看到 Got str.
的原因。
你可以测试一下:
>>> type(('id'))
<type 'str'>
对比
>>> type(('id',))
<type 'tuple'>
关于python - django/休息 : Can I have serializer with only one field?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46873978/