【发布时间】:2021-03-03 10:10:30
【问题描述】:
我正在尝试了解如何在不加载新页面或明确让用户按下保存按钮的情况下使用 AJAX更新 Django 模型。我找到了很多关于使用 AJAX 从 Django 模型中获取结果的教程,但我还没有找到任何关于使用 AJAX 更新模型的教程。
这是我目前所拥有的
我有以下 Django 模型:
#models.py
class Upload(models.Model):
email = models.EmailField()
title = models.CharField(max_length=100)
language = models.ForeignKey('about.channel', on_delete=models.CASCADE, default='Other')
date = models.DateField(auto_now_add=True)
file = models.FileField()
completed = models.BooleanField(default=False)
我正在通过表单接受这些上传,一切都很好。然后我通过以下视图在页面上显示它们:
#views.py
def submissions(request):
context = {
'uploads': Upload.objects.all().order_by('-completed', '-date')
}
return render(request, 'content/submissions.html', context)
此页面的模板:
#submissions.html
<div class="row row-cols-1 row-cols-md-3">
{% for upload in uploads %}
<div class="col mb-4">
<div class="card">
<div class="card-body">
<h5 class="card-title"> {{ upload.title }} </h5>
<h6 class="card-subtitle"> {{upload.language}} </h6>
<a href="{{ upload.file.url }}" class="channel-link card-link" download> Download </a>
{% if upload.completed %}
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" data-id="{{ upload.id }}" checked>
<label class="form-check-label" for="{{ upload.id }}"> Completed </label>
</div>
{% else %}
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" data-id="{{ upload.id }}">
<label class="form-check-label" for="{{ upload.id }}"> Completed </label>
</div>
{% endif %}
</div>
</div>
</div>
{% endfor %}
</div>
复选框起作用,并在 completed 模型字段上返回适当的选中与未选中。
我正在尝试了解如何将其连接到 AJAX,以便能够通过单击页面上每张卡上的复选框来更新 completed 模型字段,而无需加载新页面/模型或按一个保存按钮。我尝试了以下视图来更新模型,但没有运气:
#views.py
def completed(request, *args, **kwargs):
upload = Upload.objects.get(id=id)
upload.completed = not upload.complete
upload.save()
return JsonResponse({'status': 200})
还有 jQuery/AJAX:
$('.form-check').on('click', '.form-check-input', function() {
var dataID = $(this).data('id');
$.ajax({
type: 'POST',
url: 'content/completed/',
data: {
id: dataID
},
success: function () {
console.log('Success')
}
})
});
唉,我什么也得不到。我确定我用于更新的视图和 AJAX 调用都有问题,但我不知道下一步该做什么。
【问题讨论】:
标签: javascript jquery django ajax django-models