Django在`model.save()`之后不更新HTML模板

时间:2019-02-26 15:14:35

标签: javascript python ajax django django-rest-framework

我有一个使用Django REST Framework的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')

2 个答案:

答案 0 :(得分:4)

尝试将“ never_cache”装饰器添加到负责页面渲染的视图中:

User.profile&.settings&.card&.options

或如果是CBV,则使用调度方法:

from django.views.decorators.cache import never_cache

@never_cache
def myview(request, ...):
   ...

答案 1 :(得分:0)

您可以尝试使用location.reload(true)吗?也许它需要从现金中提取页面。