Администратор Django периодически возвращается 404 на модели Править - PullRequest
4 голосов
/ 01 июля 2010

Мы используем Django Admin для поддержки некоторых данных, которые экспортируются на несколько наших сайтов. Иногда при щелчке по стандартному представлению списка изменений, чтобы получить форму редактирования модели, вместо того, чтобы направлять ее на нужную страницу, мы получаем страницу / шаблон Django 404.

Это происходило несколько нерегулярно, и мы могли на некоторое время воспроизвести его, перезагрузив три раза:

  • Первый F5: 404
  • Второй F5: 404
  • Третий F5: форма изменения объекта загружается правильно

Но в последнее время он возвращал 404 чаще, чем нет. Кажется, это уменьшает шансы на возврат 404, когда мы отскакиваем от Apache (изящно) и ухудшаемся (опять же, по-видимому) с большим количеством запросов.

Запуск Django 1.2.1 в Fast-CGI / MySQL 5.1.x

FWIW, я не могу воспроизвести проблему на моей виртуальной машине, но там я запускаю mod_wsgi и в настройках установлен Debug = True. В противном случае код и база данных идентичны.

Ответы [ 3 ]

4 голосов
/ 30 сентября 2011

У меня была такая же проблема.Решением для меня было перевести мои звонки с admin.site.register() на admin.py.Если для параметра DEBUG установлено значение false, ваши модели загружаются лениво, поэтому при регистрации звонки не всегда выполняются.Очевидно, admin.py всегда загружается во время инициализации.

1 голос
/ 26 июля 2012

У меня была такая же проблема до прошлой недели. после того, как я отслеживал эту ошибку в течение нескольких месяцев, и обнаружил повышение 404 в исходном коде django.

Я изменил файл /path/to/django/contrib/admin/options.py get_object () метод класса ModuleAdmin. Примечание: я использую 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, так что используйте на свой страх и риск!

0 голосов
/ 02 июля 2010

Проверьте, есть ли альтернативный сценарий WSGI в конце:

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

имеет значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...