Джанго постоянно обновляет статистику - PullRequest
1 голос
/ 28 марта 2011

У меня есть модель Django, и я хочу показать некоторые статистические данные об этом.Например, у меня есть поле, похожее на цвет, и я хочу показать, какому количеству записей присвоено значение «красный», «зеленый» и т. Д.

Поскольку в таблице много строк инесколько цветов Я не хочу вычислять сумму каждой статистики для каждого чтения.

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

Как мне сделать что-то подобное?

Ответы [ 2 ]

3 голосов
/ 28 марта 2011

В зависимости от количества строк, но select count(id) ... GROUP BY обычно быстрое.

В противном случае сигналы Джанго - очень интересная концепция для этой цели.Вы можете «прослушать» некоторые события, такие как модель, сохраненную / удаленную ... или использовать ваши собственные сигналы.

В вашем случае вы хотите прослушивать сигналы моделей post_save и post_delete.

Вот пример:

from django.db.models import signals
import models

def itemSaved(sender, **kwargs):
    obj = kwargs['instance']
    colorMod =  models.Color.get(name = obj.color)
    colorMod.count = colorMod.count + 1
    colorMod.save()

# listen to post_save event for model MyModel
signals.post_save.connect(itemSaved, sender=models.MyModel)

Поместите этот код в models.py

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ : см. Такжеэто новый пример техники F-оператора для одной операции sql

1 голос
/ 28 марта 2011

Для этого вы можете использовать Django Signals.В частности, посмотрите на post_save и post_delete.http://docs.djangoproject.com/en/dev/ref/signals/

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