2016-08-09 20 views
2

私はAjaxを使用してクライアントからサーバーへのリクエストを作成しています。私はDJangoを使用していますが、Raw SQLクエリを使用しています。 、varcharとDecimal、最後の1つはエンコンディングの問題がありましたが、私はJsonの "default"プロパティをオーバーライドし、すべてが機能しました。Djangoのraw sql to django、DatetimeとDecimal MySqlの列

これまでは、DecimalとDateTimeのフィールドを与えるクエリがありましたが、両方ともエンコーディングエラーが発生しました。オーバーライドされた「デフォルト」は今は機能しません。なぜなら、この新しいものではDjangoJSONEncoder今では別の問題があり、エンコードされていないのですがdictfetchall(cursor)メソッドを使用してDjangoのドキュメントに照会して、cursor.fetchall()からこのエラー:'tuple' object has no attribute '_meta'が得られます。

私はちょうどjson.dumps(response_data,default=default)に辞書とすべてが大丈夫だったが、今の符号化のために、私は以下を使用する必要があることsendedでは前:json.dumps(response_data,cls=DjangoJSONEncoder)と私はそのように辞書を送信する場合、私はこのエラーを取得する:

SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data 

そして、私はこのようなシリアライザ、使用しようとします

response_data2= serializers.serialize('json', list(response_data)) 

以降dumpsresponse_data2を送信し、私はこのエラーを取得する:

'dict' object has no attribute '_meta' 

これは、MySQLのクエリのコードです:

def consulta_sql_personalizada(nombres,apellidos,puesto): 
    from django.db import connection, transaction 
    cursor = connection.cursor() 

    cursor.execute("""select E.idEmpleado as id,CONCAT(Per.nombres_persona,' ',Per.apellidos_persona) as nombre,P.nombre_puesto as puesto,E.motivo_baja_empleado as motivo_baja,E.fecha_contratacion_empleado AS fecha_contratacion,E.fecha_baja_empleado as fecha_baja, SUM(V.total_venta) AS ventas_mes,E.fotografia_empleado as ruta_fotografia from Empleado as E 
         inner join Puesto as P on E.Puesto_idPuesto=P.idPuesto 
         inner join Venta as V on V.vendedor_venta=E.idEmpleado 
         inner join Persona as Per on E.Persona_idPersona=Per.idPersona 
         where (Per.nombres_persona like %s OR Per.apellidos_persona like %s OR E.Puesto_idPuesto=%s) 
         AND E.estado_empleado=1 AND V.estado_venta=1 
         AND 
         (YEAR(V.fecha_venta) = YEAR(Now()) 
         AND MONTH(V.fecha_venta) = MONTH(Now()))""",[nombres,apellidos,puesto]) 
    row = dictfetchall(cursor) 
    return row 

そして、これは、クエリを作成し、JSONを使ってAJAXに送信し、ビューの最後の部分である:

 response_data=consulta_sql_personalizada(rec_nombres,rec_apellidos,rec_puesto) 
     return HttpResponse(
      json.dumps(response_data,cls=DjangoJSONEncoder), 
      content_type="application/json" 
     ) 
     else: 
     return HttpResponse(
      json.dumps({"nothing to see": "this isn't happening"}), 
      content_type="application/json" 
     ) 

私が知りたがっているのは、どのようにして、jsonの生のSQL結果をそのエンコンディングを使って解析できるのですか?

答えて

0

申し訳ありませんが、私はJQueryのajaxメソッドを使用しています。私はjson.parseを使用してコンソールでデータを印刷するのを忘れてしまったことを忘れていました。データはすでにjsonでした。 line 1 column 1 error。私のコードはここに投稿されたのとまったく同じように動作しました誰かが非同期リクエストを作成する方法を知りたい場合は、このチュートリアルに従いました:Django form submissions using ajax

関連する問題