0

だから私はこのコードを持っています:

def success_comment_post(request):
    if "c" in request.GET:
        c_id = request.GET["c"]
        comment = Comment.objects.get(pk=c_id)
        model = serializers.serialize("json", [comment])
        data = {'message': "Success message", 
                'message_type': 'success',
                'comment': model }
        response = JSONResponse(data, {}, 'application/json')
        return response
    else:        
        data = {'message': "An error occured while adding the comment.", 
                'message_type': 'alert-danger'}
        response = JSONResponse(data, {}, 'application/json')

jQueryに戻って、次のことを行います。

$.post($(this).attr('action'), $(this).serialize(), function(data) {
    var comment = jQuery.parseJSON(data.comment)[0];
    addComment($("#comments"), comment);

 })

さて... Django関数では、なぜ[]にコメントを入れなければならないのですか? --> model = serializers.serialize("json", [comment])

jQuery に戻ると、なぜ jQuery.parseJSON(data.comment) [0]を実行する必要があるのですか?

とにかく、私はこれをする必要はありませんか?[0]をハードコーディングしなければならないのは奇妙だと思います

どうもありがとう!

4

1 に答える 1

0

serializers.serializeは、djangoモデルインスタンスを持つクエリセットまたはイテレータのみを取りますが、Comment.objects.getを使用すると、イテレータではなくオブジェクトが返されるため、[]に入れてイテレータにする必要があります。

そのリストなので、javascriptの配列のようにもアクセスする必要があります。シリアライザーを使用せず、simplejsonを使用してフィールド値をjsonに変換することをお勧めします。

サンプルコード:

from django.utils import simplejson as json
from django.forms.models import model_to_dict

comment = Comment.objects.get(pk=c_id)
data = {'message': "Success message", 
        'message_type': 'success',
        'comment': model_to_dict(comment)}
return HttpResponse(json.dumps(data), mimetype='application/json')

私はあなたのコードの関連部分だけに言及しました。うまくいけば、これはあなたの問題を解決するはずです

于 2012-11-02T18:36:11.710 に答える