Администратор Django вызывает высокую нагрузку на одну модель - PullRequest
1 голос
/ 21 мая 2010

В моем администраторе Django, когда я пытаюсь просмотреть / отредактировать объекты из одного конкретного класса модели, использование памяти и загрузка процессора возрастают, и я должен перезапустить сервер. Я могу просматривать список объектов нормально, но проблема возникает, когда я нажимаю на один из объектов. Другие модели в порядке. Работа с объектом в коде (т.е. создание и отображение) в порядке, проблема возникает только тогда, когда я пытаюсь просмотреть объект с помощью интерфейса администратора. Класс даже не особенно экзотичен:

class Comment(models.Model):
    user = models.ForeignKey(User)
    thing = models.ForeignKey(Thing)
    date = models.DateTimeField(auto_now_add=True)
    content = models.TextField(blank=True, null=True)
    approved = models.BooleanField(default=True)

    class Meta:
        ordering = ['-date']

Есть идеи? Я в тупике. Единственная причина, по которой я мог придумать, может заключаться в том, что thing - это довольно большой объект (несколько килобайт), но, насколько я понимаю, он не будет загружен, пока не понадобится (правильно?).

1 Ответ

5 голосов
/ 21 мая 2010

Вопрос не в том, насколько велик объект Thing, а в том, сколько у вас в вашей базе данных. Это потому, что для ForeignKey по умолчанию администратор Django предоставляет вам выпадающий список, содержащий все существующие элементы. Если у вас много и много, то Django загрузит их все, чтобы заполнить этот список. То же самое относится и к пользователю.

Лучший способ обойти это - добавить ошибочное поле к raw_id_fields в вашем подклассе ModelAdmin. Это изменит представление на простое текстовое поле для идентификатора с всплывающим окном поиска.

...