Python Django Admin在模型编辑时间歇性返回404

Python Django Admin在模型编辑时间歇性返回404,python,django,django-admin,http-status-code-404,Python,Django,Django Admin,Http Status Code 404,我们使用Django管理员来维护一些导出到我们几个站点的数据。有时,当通过标准变更列表视图单击以获得模型编辑表单而不是路由到正确的页面时,我们得到的是Django 404页面/模板 这是偶然发生的,我们可以在一段时间内通过重新加载三次来复制它: 第一层5:404 第二层5:404 第三个F5:对象更改表单正确加载 但最近它返回404的次数比没有更多。当我们跳出apache时(优雅地)返回404的几率似乎会降低,而随着请求的增加,返回404的几率会变得更糟 在Fast CGI/MySQL 5.

我们使用Django管理员来维护一些导出到我们几个站点的数据。有时,当通过标准变更列表视图单击以获得模型编辑表单而不是路由到正确的页面时,我们得到的是Django 404页面/模板

这是偶然发生的,我们可以在一段时间内通过重新加载三次来复制它:

  • 第一层5:404
  • 第二层5:404
  • 第三个F5:对象更改表单正确加载
但最近它返回404的次数比没有更多。当我们跳出apache时(优雅地)返回404的几率似乎会降低,而随着请求的增加,返回404的几率会变得更糟

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


FWIW,我不能在我的虚拟机上重现这个问题,但是我在那里运行mod_wsgi,并且在设置中设置了Debug=True。否则,代码和数据库是相同的。

请查看以下代码末尾的备用WSGI脚本:


有区别。

我也有同样的问题。我的解决方案是将调用移动到
admin.site.register()
admin.py
。当DEBUG设置为false时,您的模型被延迟加载,因此注册调用并不总是进行。显然,
admin.py
总是在初始化时加载的。

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

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

不知何故,django在queryset中找不到具有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的源代码中更改某些内容不是一件好事,所以使用它的风险自负

你的admin.site.register()调用还会在哪里?我的已经在每个应用程序的admin.py中了,但是现在只有在使用apache的prod中才出现这个问题,而不是manage.py runserverhi@radtek,你能解决这个问题吗,我只在prod上出现了相同的问题。是的,我通过将我的
admin.site.register()
移动到
admin.py
中解决了这个问题,不适合我。我得到的404页面也坏了,所有静态图像都没有显示,翻译也坏了。其他URL上的404页面工作正常。(django 1.6.8和mod_wsgi apache)这篇博客文章现在已经过时了,不应该被使用。Django从那时起已经改变了很多。apache mod_wsgi的行为与gunicorn+wsgi不同,所以我只有在mod_wsgi上运行时才遇到404问题。问题是在init之外有条件地声明了一个objects变量。在豆茎中运行的mod_wsgi不喜欢它,但在其他地方运行良好。这有意义吗?在我的例子中,这个问题非常具体。不,你的描述没有意义,所以不知道你在说什么。如果您想进一步了解它,请使用mod_wsgi邮件列表询问它,以及为什么gunicorn的行为有所不同。我已经按照上面的说明解决了这个问题。只是不知道为什么mod_wsgi和gunicorn/wsgi会给我不同的结果。我不会再追查下去了不。