从django查询返回对象

时间:2017-05-09 09:49:08

标签: python django django-rest-framework

我是Python的新手,在Django中使用rest框架和使用mysql构建数据库来构建API。 我使用过滤器查询获取用户信息对象但返回的数组。

  

在Login API中我的代码是:

is_valid_user = users.objects.filter(email=req_email, password=req_password)
serializer = usersSerializer(is_valid_user,many=True)
    if is_valid_user:
        response = {
            'message': 'success',
            'code': 1,
            'data':serializer.data
    else:
        response = {
            'message': 'User not found',
            'code': 0,
        }
    return Response(response)
  

我的usersSerializer类:

class usersSerializer(serializers.ModelSerializer):
    class Meta:
        model = users
        fields = ('uid', 'first_name', 'last_name', 'email', 'gender')
  

对于此代码响应是:

{
      "message": "success",
      "code": 1,
      "data": [
        {
          "uid": 6,
          "first_name": "anuj",
          "last_name": "sharma",
          "email": "anujs1991@gmail.com",
          "gender": "0"
        }
      ]
 }

但为此,我不想要data的数组。 预期结果应为:

  {
    "message": "success",
    "code": 1,
    "data": {
        "uid": 6,
        "first_name": "anuj",
        "last_name": "sharma",
        "email": "anujs1991@gmail.com",
        "gender": "0"
    }
}

请帮助我。

1 个答案:

答案 0 :(得分:1)

您的问题下的评论应该指向另一种解决方案。在这里,我想解释一下,为什么你要获得一个数组,而不是一个对象。

在这一行:


isValidUser = users.objects.filter(email=req_email, password=req_password)

您使用filter方法,该方法可能返回多于1个结果(或无结果)。无论结果数量多少,您总会得到一个数组(python中的列表)。 filter()方法返回新的 QuerySet

如果要显式检索单个结果,并且模型类中有唯一字段,则应使用方法get(),该方法不返回QuerySet,而是返回对象。

因此,如果我们将字段email设置为唯一,那么您可以这样做:


isValidUser = users.objects.get(email=req_email)

如果有一个可以匹配的条目,那将返回一个对象。

此外,遵循Python的命名约定并使用snake case命名变量是一个好习惯:

is_valid_user

而不是

isValidUser