Javascript Django不';t在`model.save()之后更新HTML模板`
我有一个使用Django REST框架的Django应用程序。当我执行更改模型字段的Ajax调用时:Javascript Django不';t在`model.save()之后更新HTML模板`,javascript,python,ajax,django,django-rest-framework,Javascript,Python,Ajax,Django,Django Rest Framework,我有一个使用Django REST框架的Django应用程序。当我执行更改模型字段的Ajax调用时: #删除媒体 def delete(自我、请求、主键、格式=无): 媒体=获取对象或404(媒体,主键=主键) media.deleted=True media.save() 返回响应(status=status.HTTP\u 200\u OK) 然后触发一个JavaScriptlocation.reload(),重新加载的页面仍然包含“已删除”的模型。在数据库上,删除的字段为True,在我的模
#删除媒体
def delete(自我、请求、主键、格式=无):
媒体=获取对象或404(媒体,主键=主键)
media.deleted=True
media.save()
返回响应(status=status.HTTP\u 200\u OK)
然后触发一个JavaScriptlocation.reload()代码>,重新加载的页面仍然包含“已删除”的模型。在数据库上,删除的字段为True,在我的模板上,我这样做:
{%用于发行中的媒体。getMedia%}
{%if not media.deleted%}
{%include'core2/include/media.html%}
{%endif%}
{%endfor%}
当我重新加载Django Web服务器时,它不再显示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表单修改对象时(例如,在创建对象时),页面会正确地重新加载
第二版
在问题模型上实现问题.getMedia
:
def getMedia(self):
返回Media.objects.filter(issue=self).order_by('creationDate'))
能否尝试使用location.reload(true)
。可能它从现金中获取页面。尝试将“从不缓存”装饰器添加到页面呈现的视图报告中:
from django.views.decorators.cache import never_cache
@never_cache
def myview(request, ...):
...
如果是CBV,则发送至调度方法:
class MyView(View):
@never_cache
def dispatch(self,request,*args,**kwargs):
return super().dispatch(request,*args,**kwargs)
你确定重新加载有效吗?知道吗?可能是因为我没有更新序列化程序…?我们需要检查ajax调用是否正常工作。我怀疑数据库中的字段状态没有更改。撕裂没有问题。你能调用delete API,然后检查数据库中deleted的值吗?@sun\u jara数据库中的字段正确更改。因此,我按下按钮进行ajax调用,在后端和数据库上调试调用(一切正常),然后重新加载前端页面,清理缓存,但没有成功。只有重新启动django框架,它才能正确地重新加载模型。您能否共享issue.getMedia
的实现,以及设置issue上下文变量值的get_context()方法。另外,你是否在任何地方使用预回迁相关软件?@selan-我仍然认为,问题在于重新加载。你是什么意思每次重新加载时,我都会手动清理缓存。。我意识到,如果我在一个私有窗口上打开页面,模型会显示为更新,而在旧窗口(firefox)上仍然显示为旧窗口。我使用firefox来重新加载内容,我使用CTRL-shift+R来清除缓存。另外,我还有开发者工具>网络上的禁用缓存选项。它可以工作!你能解释一下禁用缓存的后果吗?页面呈现速度较慢?使用“从不缓存”装饰器,您可以指示浏览器不要缓存页面,因此每当用户需要时,他的浏览器将依次命中服务器(顺便说一句,这正是您在用例中想要的)。这会增加多少延迟取决于重建特定页面所需的工作。在有证据表明有太多用户需要同一个页面之前,我不会对动态站点中的缓存太过着迷。在这种情况下,我会考虑缓存,以减少服务器上的资源使用量,但在此之前,我会尝试优化页面渲染。缓存在这里不是一个选项,正如您已经体验到的,但是您有更多的解决方案可用。例如,您可以完全避免重新加载页面,而是使用DOM操作从现有页面中删除已删除的项。这可以通过ajax调用的成功返回安全地触发,这表明该对象已经在服务器上被删除。