Администратор Django зависает (до истечения времени ожидания) для конкретной модели при попытке редактирования / создания - PullRequest
23 голосов
/ 01 мая 2011

Этот сводит меня с ума прямо сейчас. Этого не было раньше (даже я получил скриншоты для руководства пользователя, так как это требовалось клиенту).

Сначала я заметил это на рабочем сервере, а затем проверил, и это также происходит на dev-сервере, который поставляется с Django. Модель появляется на главной странице администратора django, я могу нажать на нее, и она отобразит список точек продаж. Проблема возникает всякий раз, когда я хочу отредактировать существующий экземпляр или создать новый.

Я просто нажимаю на ссылку (или ставлю ее на панель) и она просто зависает.

class PointOfSaleAdmin(admin.ModelAdmin):
    list_display = ('id','business', 'user', 'zipcode', 'address','date_registered')
    list_filter = ('business',)
    filter_horizontal = ('services',)
admin.site.register(models.PointOfSale, PointOfSaleAdmin)

Это регистрация модели. Все модели зарегистрированы в приложении администратора, и пользователь, чтобы проверить это является суперпользователем. Модель:

class PointOfSale(models.Model):
    user = models.ForeignKey(User)
    zipcode = models.ForeignKey(Zipcode)
    business = models.ForeignKey(Business)
    services = models.ManyToManyField(Service, 
        verbose_name='available services')
    date_registered = models.DateField(auto_now_add=True)
    address = models.CharField(max_length=300)

Плюс несколько методов, которые не должны иметь большого значения. Кроме того, в прошлый раз перед тем, как я проверил админ, сразу после создания всех этих методов, так что это не должно иметь значения.

Администратор очень редко получает доступ к этой странице. Обычно это просто список PoS, но это все еще беспокоит меня. Есть идеи о том, почему оно может висеть? Все остальные модели работают просто отлично.

Это происходит как в Django 1.2.5, так и в 1.3

.

EDIT:

Я изменил пределы тайм-аута. Это работает, но так или иначе требуется несколько минут, чтобы это действительно произошло. Таким образом, есть что-то на заднем плане, которое берет возраст. Я не понимаю, почему это происходит только для этой модели, и это происходит в разных средах (и с небольшими наборами данных)


Мне почти хочется ударить себя. Моя вина, что я не сплю так долго.

Проблема в том, что список почтовых индексов довольно большой (десятки тысяч), а поле внешнего ключа загружается как тег выбора html, что означает, что он загружает каждую отдельную запись. Это проблема с количеством данных просто.

Теперь мне интересно, как контролировать отображение внешнего ключа в админке. Кто-нибудь может помочь с этим?

Ответы [ 3 ]

27 голосов
/ 01 мая 2011

В вашем файле admin.py под соответствующим классом администратора установите

raw_id_fields = ('zipcode',)

Это будет отображать PK почтового индекса вместо выпадающего списка.

Существует ли причина, по которой вы устанавливаете почтовый индекс как собственную модель вместо использования CharField или фактического почтового индекса поле модели ?

7 голосов
/ 25 мая 2014

Я просто хотел добавить, что другой вариант - создание списка read_only_fields.В тех случаях, когда существует связь с моделью с большим количеством вариантов выбора (в моем случае, в каталогах таблиц rel есть флаги между большим количеством пользователей и обсуждениями), но вам не нужно редактировать поле.Вы можете добавить его в список read_only_fields, просто напечатав значение, а не варианты.

class FlaggedCommentsAdmin(ModelAdmin):
    list_display = ('user', 'discussion', 'flagged_on')
    readonly_fields = ('user', 'discussion')
0 голосов
/ 01 мая 2011

Вы пытались проверить журналы apache (если вы явно используете apache) или любые другие журналы, связанные с HTTP-сервером? Это может дать вам представление о том, с чего начать.

Это единственная модель, которая затронута? Вы упомянули методы на модели. Попробуйте закомментировать эти методы и попробуйте снова (включая метод __unicode__), просто чтобы посмотреть, как они на него как-то влияют. Уменьшите все до минимума (насколько это очевидно), чтобы попытаться определить, где началась регрессия.

Попробуйте отслеживать ресурсы сервера, когда запрашиваете эту страницу. Резко ли растет процессор? А как насчет сетевого ввода-вывода? Может быть проблема с базой данных (как-то?).

Извините, на самом деле это не отвечает на ваш вопрос, но это первые методы отладки, которые я попытаюсь попытаться диагностировать.

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