【发布时间】:2017-09-12 04:19:01
【问题描述】:
谁能说我哪里做错了?成功添加后,我正在尝试使用 ajax 更新 cmets 列表,但最终看到此页面。
新评论在数据库中,但似乎我错过了一些东西。提交后将我重定向到“task_comment_add”网址,但我需要留在同一页面,只需更新对象列表(task-cmets)。
urls.py:
url(r'^(?P<project_code>[0-9a-f-]+)/(?P<group_task_code>[0-9a-f-]+)/(?P<task_code>[0-9a-f-]+)/task_comment_add/$',
task_comment_add,
name='task_comment_add'),
views.py:
def task_comment_add(request, project_code, group_task_code, task_code):
data = dict()
project = get_object_or_404(Project, pk=project_code, status='open')
group_task = get_object_or_404(GroupTask, pk=group_task_code)
task = get_object_or_404(Task, pk=task_code)
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.author = request.user
comment.save()
task.comments.add(comment)
data['form_is_valid'] = True
data['html_task_comment'] = render_to_string('project/task_comment_list.html',
{'task': task})
else:
data['form_is_valid'] = False
else:
form = CommentForm()
context = {'project': project, 'group_task': group_task, 'task': task, 'form': form}
data['html_task_comment_form'] = render_to_string('project/task_comment_form.html', context, request=request)
return JsonResponse(data)
task_list.html:
<div class="list-group custom-list-group">
<div class="list-group-item bg-faded">
{% include 'project/task_comment_form.html' %}
</div>
<div id="task-comments">
{% include 'project/task_comment_list.html' %}
</div>
</div>
task_comment_form.html:
<form method="post" id="task-comment-form" action="{% url 'project:task_comment_add' project_code=project.code group_task_code=group_task.code task_code=task.code %}">
</form>
task_comment_list.html:
{% for comment in task.comments.all %}
<div class="list-group-item flex-column align-items-start">
<div class="d-flex w-100 justify-content-between">
<h6 class="mb-1">{{ comment.author }}</h6>
<small>{{ comment.created }}</small>
</div>
<p class="custom-p">{{ comment.text }}</p>
</div>
{% empty %}
<div class="list-group-item flex-column align-items-start">
<div class="d-flex w-100 justify-content-center">
<h6 class="mb-1 custom-h"><i class="fa fa-info-circle" aria-hidden="true"></i>	{% trans 'NO COMMENTS' %}</h6>
</div>
</div>
{% endfor %}
JS:
$("#task-comment-form").submit(function(event) {
event.preventDefault();
console.log(event.preventDefault());
var form = $(this);
$.ajax({
url: form.attr("action"),
data: form.serialize(),
type: form.attr("method"),
dataType: 'json',
success: function (data) {
if (data.form_is_valid) {
$("#task-comments").html(data.html_task_comment);
}
else {
$("#task-comment-form").html(data.html_task_comment_form);
}
}
});
$("#task-comment-form")[0].reset();
return false;
});
【问题讨论】:
-
你的意思是,保存成功后你会被重定向到 task_comment_add url?
-
我想我知道问题所在,但需要建议。我有任务列表,每个任务都有 cmets 列表,所有这些都在一页中。这意味着我有表格可以为每个任务添加评论。我注意到只有第一个任务我才能正确添加 cmets。因为所有表单都有相同的 id,我认为 JS 只看到第一个表单 id。如何为每个表单制作唯一的 id。在模板中我可以使用 id="task-comment-form-{{ forloop.counter }}" 但是在 JS 中要改变什么?
-
为什么不只使用一种形式来发表评论?
-
好吧,我的任务做不到。你有什么想法?我真的需要帮助。
标签: jquery python ajax django python-3.x