Django,jquery和modelforms

时间:2012-02-25 02:12:21

标签: ajax django modelform

希望获得有关在django中使用ajax的一些见解和提示。

说我有一个功能:

def add_comment(request, pk):
  if request.method == 'POST' and request.is_ajax():
    comment_form = CommentForm(request.POST)
    if comment_form.is_valid():
      comment = comment_form.save(commit=True)
      comment.save()
    json = simplejson.dumps(comment, ensure_ascii=False)
   return HttpResponse(json, mimetype='application/json')
  return render_to_response({{ post.id }}', {'comment': comment,}), context_instance=RequestContext(request), mimetype='application/json')

我试图将评论发布到没有使用ajax函数重定向的页面:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script></javascript>
<script type="text/javascript">
  $(document).click(function()
  {
   $('#comment_form').submit(function()
   {
    var dataString = $('#comment_form').serialize();
    $.ajax({
      type: 'POST',
      url: '',
      data: dataString,
      success: function(data){
        $('').html(data);
      },
    });
    return false;
    });
  });

</script>

我相信我在这里混淆了一些东西。我试图让页面加载注释而不重定向。我不需要一个确切的答案,也许只是朝着正确的方向转向。

2 个答案:

答案 0 :(得分:2)

这有助于:

这可能是你的观点:

import json

def add_comment(request, pk):
    if request.method == 'POST' and request.is_ajax():
        comment_form = CommentForm(request.POST)
        if comment_form.is_valid():
            comment = comment_form.save(commit=True)
            comment.save()
            json_response = json.dumps({"status":"Success"})
            return HttpResponse(json_response)
        errors = {}
        for k, v in job_type_form.errors.items():
            errors[k.capitalize()] = v
        response = {
            'success': False,
            'errors': errors
        }
        return HttpResponse(json.dumps(response))

你的jquery可能是这样的:

$('#comment_form').submit(function() {
    var dataString = $('#comment_form').serialize();
    $.ajax({
        type: 'POST',
        url: '',// you need to put this to something like '{% url to_your_view %}'
        data: dataString,
        dataType: 'json'
        success: function(data){
            // you can access to your json object like data.status or data.something
            $('').html(data.status);
        },
    });
    return false;
});

答案 1 :(得分:0)

感谢帖子,我终于解决了问题。 jquery是主要问题。

$(document).ready(function() {
  $('#comment_form').submit(function(e) {
  e.preventDefault();
  $.ajax({
    type: 'POST',
    url: '{% url art.views.post %}',
    data: $('#comment_form').serialize(),
    dataType: 'json';
    success: function(){
      location.reload();
$('#comment_form').get(0).reset();
  },
  });
  return false;
  });
});

我发送的是DOM对象,而不是实际的表单数据。

在视图中,我将两个函数组合在一起,以使两者共享相同的URL。

def post(request, pk):
  post = Post.objects.get.(pk=int(pk))
  comments = Comment.objects.filter(post=post)
  _dict = dict(post=post, comments=comments, form=Comment_form(), user=request.user)
  _dict.update(csrf(request))
  cf_obj = Comment(post = Post.objects.get(pk=pk))
  if request.method == 'POST' and request.is_ajax():
    if comment_form.is_valid():
      comment = comment_form.save(commit=True)
    else:
      raise Http404
    response = serializers.serialize('json', [comment])
    return HttpResponse(response, mimetype='application/json')
  return render_to_response('post.html', d)