2017-05-09 99 views
0

我是Python新手,並在Django中使用rest框架和使用mysql數據庫構建API。 我使用過濾器查詢來獲取用戶信息對象,但它的返回數組。從Django查詢返回對象

在登錄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": "[email protected]", 
      "gender": "0" 
     } 
     ] 
} 

但是爲此我不想排列data。 預期結果應該是:

{ 
    "message": "success", 
    "code": 1, 
    "data": { 
     "uid": 6, 
     "first_name": "anuj", 
     "last_name": "sharma", 
     "email": "[email protected]", 
     "gender": "0" 
    } 
} 

請幫助我。

+1

你避免一切Django的休息框架通過這樣做給你。如果你使用了一個序列化器,你可以很容易地得到你想要的結果。 –

+0

@DanielRoseman感謝您的建議。我將閱讀其餘的框架文檔。 –

+1

'isValidUser.values('uid','first_name','last_name','email','gender')[0]' – itzMEonTV

回答

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的命名約定,並命名與蛇的情況下變量:的

is_valid_user 

代替

isValidUser 
+0

感謝您的解釋。我怎樣才能從這個對象獲得每一個信息。 isValidUser.uid將給出該對象的ID。如何在單個語句中檢索所有信息,如id,first_name等? –

+0

如果您想在單個語句中獲取所有屬性的值,那麼您應該使用序列化程序。 DRF提供了許多實現這一目標的工具。您可以設置關聯模型類的深度,使用超鏈接序列化器,繼承序列化器和其他許多事情。 – cezar