Django админ кеш м2м отношение

У меня есть две модели:

models.py

class City(models.Model):
    title = models.CharField(max_length=255)
    show = models.BooleanField(default=True)

class Company(models.Model)
    title = models.CharField(max_length=255)
    cities = models.ManyToManyField(City, null=True, blank = True)

admin.py

class CompanyAdmin(admin.ModelAdmin):
    search_fields = ('title',)
    filter_horizontal = ('cities',)

Это около 23000 городов в базе данных.

Когда я редактирую детали компании в Admin, она загружается вечно!!! Простой доступ к admin/myapp/company/12/ занимает 2-3 минуты - это ужасно.

Как я могу ускорить вещи и кэшировать набор запросов модели города?

2 ответа

Вы можете использовать raw_id_fields

class CompanyAdmin(admin.ModelAdmin):
    raw_id_fields = ("cities",)

23000 на самом деле "ничего" для базы данных.

Во-первых, вам нужно определить "виновника" замедления, какой запрос медленный. Это где django-debug-toolbar очень поможет Затем вы можете запустить запросы вручную с EXPLAIN и посмотрите, что можно улучшить - например, добавление индексов может помочь.

Также рассмотрите возможность использования django-cache-machine или же johnny-cache пакеты.

Также см:

Другие вопросы по тегам