我正在尝试创建一个简单的待办事项列表应用程序,该应用程序使用POST将数据发布到数据库中,然后使用' x' (\ u00D7)删除待办事项。代码如下:
Views.py
def delete(self, request, id):
print(request.DELETE)
self.model.objects.get(pk=request.delete['pk']).delete()
return render(request, self.template_name, {'object_list':self.model.objects.all()})
Models.py
class TodoDB(models.Model):
todos = models.CharField(max_length=1000)
day = models.CharField(max_length=10)
def __str__(self):
return str(self.todos)
HTML和JS
<ul class="list-group list-group-flush" id="list-group">
{%for item in object_list%}
<li class="list-group-item">{{item.todos}}</li>
{%endfor%}
</ul>
for (var i = 0; i < close.length; i++) {
close[i].onclick = function() {
var li = this.parentElement;
li.style.display = "none";
$.ajax({
type: 'DELETE',
url: "{%url 'todo_list'%}",
data:{'pk':pk},
success: function(data){
alert("Success!");
},
error: function(){
alert("Error! Couldn't send delete request")
}
});
}
任何帮助都会很棒。谢谢!
编辑:我忘了添加错误:错误是找不到csrf_token。我将整个列表放在新的表单标记下并在其中插入{%csrf_token%},但它仍然不接受该标记。
答案 0 :(得分:0)
请考虑阅读 https://docs.djangoproject.com/en/2.0/ref/csrf/ 关于它如何在Django中组成。 简而言之,您需要在表单中呈现csrf标记,并在请求期间使用AJAX发布它。 你的错误正是如此。
data:{'pk':pk},
在你的JS部分应该看起来像:
data:{
'pk':pk,
'csrf_token': [your rendered token here...]
},