Django Admin在模型编辑中间歇性地返回404

时间:2010-07-01 14:12:37

标签: python django django-admin http-status-code-404

我们正在使用Django Admin来维护一些导出到我们网站的数据。有时,当点击标准更改列表视图以获取模型编辑表单而不是路由到正确的页面时,我们将获得Django 404页面/模板。

发生了一些有点不合时宜的事情,我们可以通过重新加载三次来重现它:

  • 首先F5:404
  • 第二次F5:404
  • 第三个F5:正确加载对象更改表单

但最近它经常回归404。当我们反弹apache(优雅地)并且随着更多请求变得更糟(似乎再次)时,它似乎降低了返回404的几率。

在Fast-CGI / MySQL 5.1.x上运行Django 1.2.1

FWIW,我无法在我的VM上重现问题,但是我在那里运行mod_wsgi并在设置中设置了Debug = True。否则代码和数据库是相同的。

3 个答案:

答案 0 :(得分:4)

我有同样的问题。对我而言,解决方案是将我的来电移至admin.site.register()admin.py。如果将DEBUG设置为false,则会延迟加载模型,因此不会始终进行注册调用。显然,admin.py总是在初始时加载。

答案 1 :(得分:1)

直到上周我才遇到同样的问题。在我跟踪这个错误几个月后,我发现404在django源代码中提升。

我修改了ModuleAdmin类的文件/path/to/django/contrib/admin/options.py get_object()方法。 注意:我使用Django 1.3.1

某种程度上,django在查询集中找不到具有pk object_id的对象。所以我修改了这样:

def get_object(self, request, object_id):
    ....
    queryset = self.queryset(request)
    model = queryset.model
    obj = None

    #first search the object with original way
    try:
        object_id = model._meta.pk.to_python(object_id)
        obj = queryset.get(pk=object_id)
    except:
        #print "DEBUG: > first try does not exist (%s)" % str(object_id)
        obj = None

    if obj is None: 
        #if object doesn't exist in queryset, search in db
        try:
            object_id = model._meta.pk.to_python(object_id)
            obj = model.objects.get(pk=object_id)
            #print "DEBUG: > second try found %s" % str(obj)
        except (model.DoesNotExist, ValidationError):
            #print "DEBUG: > second try does not exist"
            obj = None
    return obj

我知道在django的来源中更改某些内容并不是一件好事,所以请自担风险使用!

答案 2 :(得分:0)

查看末尾的备用WSGI脚本:

http://blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use-with.html

有所作为。