Самый эффективный способ сделать запрос в виде сводной таблицы для суммирования правок пользователей в django - PullRequest
2 голосов
/ 25 декабря 2011

Я хочу показать пользователю последние 10 изменений во всех моих объектах базы данных.

Я использую django-reversion для отслеживания истории изменений в моих модельных объектах.Я также несколько дублирую это в сводном представлении.Там, где реверсия создает список истории по объектам, сводный вид просто отслеживает один список с каждым изменением в хронологическом порядке.Является ли более эффективным делать запросы с помощью этого сводного списка, или я мог бы / должен ли я просто запросить все таблицы реверсии на предмет последних 10 изменений для всех объектов?

Вторая часть: Я хочу показатьПользователь их правки сгруппированы по объекту

Итак, скажем, пользователь редактировал 3 объекта по 10 раз каждый.Пользователь редактировал каждый объект в разные дни, поэтому в первый день пользователь редактировал все 3, во второй день пользователь редактировал, может быть, 1 из них и т. Д. Я хочу показать пользователю таблицу, которая выглядит следующим образом

Object      Date of your most recent edit    Date of last edit  
Object 1            12-24-11                     12-25-11  
Object 2            12-20-11                     12-23-11  

Если во втором столбце указано последнее редактирование, специфичное для пользователя, а в третьем столбце указано последнее изменение, выполненное любым пользователем.

Я хочу, чтобы пользователь мог выбрать Объект 1, а затем увидетьвсе их правки для этого объекта:

Object      Date of your most recent edit    Date of last edit
Object 1            12-24-11                     12-25-11
   edited name      12-24-11
   edited type      12-19-11
   edited subject   12-18-11
   edited date      12-18-11
   edited type      12-16-11
Object 2            12-20-11                     12-23-11

Как я могу структурировать этот запрос?Самый прямой способ, который я могу придумать, это запросить отдельный / уникальный список объектов, отфильтрованных пользователем, из таблиц реверсии или сводной таблицы, а затем запросить реверсию по пользователю и объекту, чтобы получить более подробную историю.Кажется, это может быть более эффективным.

Могу ли я создать еще одну сводную таблицу для пользователя, которая бы отслеживала изменения для упрощения запросов в этом формате?Как бы я структурировал этот тип таблицы?

Какой-то код.Я использую это, чтобы получить список всей истории для данного объекта.Он дает мне список версий для объекта базы данных, примечание о том, что было отредактировано, дату редактирования и пользователя, который внес изменение:

version_list = Version.objects.get_for_object(object).select_related("revision__user")

И я просто использую это, чтобы получить простойсписок правок.В этой сводной таблице последние 10 записей являются самыми последними изменениями (объект, сведения о том, что было изменено, дата и пользователь):

whats_new_items = WhatsNew.objects.all()[0:10]
...