forms.py
class CommentForm(forms.ModelForm): class Meta: model = Comment fields = ('text_comment',)
models.py
class Comment(models.Model): text_comment = models.TextField() def __str__(self): return self.text_comment
urls.py
urlpatterns = [ url(r'^$', views.comment_list, name='comment_list'), url(r'^edit/$', views.comment_list, name='comment_list_edit'), ]
views.py
@csrf_exempt def comment_list(request): if request.is_ajax() and request.method == "POST": form = CommentForm(request.POST) comment = Comment(text_comment=request.POST.get('text_comment', "ошибка передачи из формы")) print('AJAX') print('form: ', form) print('request.body: ', request.body.decode('utf-8')) print('request.POST: ', request.POST) #comment.save() #data_ajax = {'comment': comment} data_ajax = {'comment': "Новый комментарий"} return JsonResponse(data_ajax) else: print('NO AJAX') form = CommentForm() comments = Comment.objects.all() return render(request, 'blog/comment_list.html', {'comments': comments, 'form': form})
script.js
$(document).ready(function ($) { var form = $('#login'); form.submit(function(e) { e.preventDefault(); var data_text = $("[name='text_comment']").val(); var csrftoken = $("[name='csrfmiddlewaretoken']").val(); $.ajax({ type: "POST", url: '/edit/', dataType: 'json', contentType: 'application/json; charset=utf-8', data: {csrfmiddlewaretoken: csrftoken, comment: data_text}, error: function (jqXHR, status, error) { alert('Ошибка получения запроса'); }, success: function(result) { alert(result.comment); $("div.text p").html(result.comment); } }); }); });
comment_list.html
<!DOCTYPE html> {% load staticfiles %} <html> <head> <script src="{% static 'js/jquery.js' %}"></script> <script src="{% static 'js/jquery.min.js' %}"></script> <script src="{% static 'js/script.js' %}"></script> <title>AJAX</title> </head> <body> <div class="text"> COMMENT <br> {% for comment in comments %} {{ comment }} {% endfor %} <p>Здесь будет результат работы ajax скрипта</p> </div> <div class="text-form"> <form method="POST" class="post-form" id="login" action="." enctype="multipart/form-data"> {% csrf_token %} {{ form.as_p }} <input type="submit" value="Значение" class="btn btn-default btn-sm" name="preview_submit"/> </form> </div> </body> </html>
Консоль выдает
ystem check identified no issues (0 silenced). October 19, 2016 - 09:45:31 Django version 1.9.5, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK. //ОБНОВЛЯЮ СТРАНИЦУ NO AJAX [19/Oct/2016 09:45:35] "GET / HTTP/1.1" 200 955 [19/Oct/2016 09:45:35] "GET /static/js/script.js HTTP/1.1" 200 817 [19/Oct/2016 09:45:35] "GET /static/js/jquery.js HTTP/1.1" 304 0 [19/Oct/2016 09:45:35] "GET /static/js/jquery.min.js HTTP/1.1" 304 0 //ДЕЛАЮ SUBMIT AJAX form: <tr><th><label for="id_text_comment">Text comment:</label></th><td><ul cla ss="errorlist"><li>This field is required.</li></ul><textarea cols="40" id="id_t ext_comment" name="text_comment" rows="10"> </textarea></td></tr> request.body: csrfmiddlewaretoken=XNwv9peCMLXVJIl3qzjSkCGRrnH3Cw5F&comment=77777 request.POST: <QueryDict: {}> [19/Oct/2016 10:09:57] "POST /edit/ HTTP/1.1" 200 112
Как видим, те данные, которые передаются через request.body, приходят нормально, а те,
которые через request.POST, теряются.
Никто не сталкивался, почему это происходит и как лечится.