2017-05-09 9 views
0

私はPythonで初心者で、残りのフレームワークを使ってDjangoでAPIを構築し、データベースにmysqlを使用しています。 私はフィルタ情報を取得するために、ユーザークエリオブジェクトを取得するために、クエリを使用しています。ログインAPIでdjangoクエリからオブジェクトを返す

私のコードは次のとおりです。

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のすべてを回避しています-frameworkはこれを行うことであなたを与えます。シリアライザを使用した場合、簡単に結果を得ることができます。 –

+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) 

あなたが1つの以上の結果(又はなし)を返すことができるfilter方法を、使用します。結果の数にかかわらず、常に配列(Pythonのリスト)を取得します。 filter()メソッドは、QuerySetを返します。

明示的に1つの結果を取得し、モデルクラスに一意のフィールドがある場合は、get()メソッドを使用する必要があります。これはクエリセットを返さず、オブジェクトです。

もしそうなら、あなたはこれを行うことができ、のフィールドemailがユニークに設定されているとしましょう:一致させることができるエントリが存在する場合、オブジェクトを返します


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

また、Pythonの命名規則に従うと、ヘビのケースで変数に名前を付けることをお勧めです:

is_valid_user 

代わり

isValidUser 
+0

説明していただきありがとうございます。そのオブジェクトからそれぞれの情報をどのように得ることができますか? isValidUser.uidはそのオブジェクトからIDを取得します。 id、first_nameなどのすべての情報を単一の文で取り出すにはどうすればよいですか? –

+0

単一のステートメント内のすべてのプロパティの値を取得する場合は、シリアライザを使用する必要があります。 DRFはこれを達成するための多くのツールを提供しています。関連するモデルクラスの深さを設定したり、ハイパーリンクされたシリアライザを使用したり、シリアライザや他の多くのものを継承したりすることができます。 – cezar