【发布时间】:2019-07-20 04:21:37
【问题描述】:
我有一个使用 Django REST 框架的 Django 应用程序。当我进行更改模型字段的 Ajax 调用时:
# Delete media
def delete(self, request, pk, format=None):
media = get_object_or_404(Media, pk=pk)
media.deleted = True
media.save()
return Response(status=status.HTTP_200_OK)
然后触发一个 JavaScript location.reload();,重新加载的页面仍然包含“已删除”模型。在数据库中,deleted 字段为 True,而在我的模板中,我这样做了:
{% for media in issue.getMedia %}
{% if not media.deleted %}
{% include 'core2/include/media.html' %}
{% endif %}
{% endfor %}
当我重新加载 Django 网络服务器时,它不再显示 media.deleted 对象。
已编辑
Ajax 请求是:
controller: function ($scope) {
$scope.execute = function(url){
console.log($scope.action)
$.ajax({
url: $scope.action,
type: 'DELETE',
success: function(result){
location.reload();
},
error: function(e){
alert("Error deleting")
console.log(e)
}
});
}
}
当我使用常规 Django 表单修改对象时(例如创建对象时),页面会正确重新加载。
第 2 版
issue.getMedia在问题模型上的实现:
def getMedia(self):
return Media.objects.filter(issue=self).order_by('creationDate')
【问题讨论】:
-
你确定重新加载有效吗?
-
有什么想法吗?也许是因为我没有更新序列化程序...?
-
我们需要检查 ajax 调用是否有效。我怀疑数据库中的字段状态没有改变。出租没有问题。你可以调用delete API,然后检查数据库中deleted的值吗?
-
@sun_jara 正确更改数据库上的字段。所以,我按下按钮进行 ajax 调用,我在后端和数据库上调试调用(一切正常),然后我重新加载前端页面,也清理缓存,但没有成功。只有当我重新启动 django 框架时,它才会正确重新加载模型
-
明白。您能否分享
issue.getMedia的实现以及设置问题上下文变量值的get_context() 方法。另外,您是否在任何地方使用 prefetch_related ?
标签: javascript python ajax django django-rest-framework