Форум сайта python.su
Добрый день!
Есть система, в которой есть несколько десятков пользователей.
Эти несколько десятков пользователей редактируют одну модель, которая содержит несколько десятков тысяч строк.
Модель:
name1=CharField()
name2=CharField()
name1cat=ForeignKey(cat1)
name2cat=ForeignKey(cat2)
Нужна система, которая бы отслеживала какие пользователи какие именно корректировки внесли в модель (значения до внесения корректировок, значения после внесения, время корректировок).
Не хочется изобретать велосипед, поэтому хотелось бы спросить: существуют ли уже какие-то готовые системы, приложения для реализации данной задачи?
Отредактировано Dr.Livsi (Авг. 7, 2012 11:26:44)
Офлайн
https://docs.djangoproject.com/en/dev/ref/models/instances/#what-happens-when-you-save
Можете посмотреть на код:
https://github.com/sunlightlabs/django-gatekeeper/ или
https://bitbucket.org/rajeesh/django-monitor/
Отредактировано fata1ex (Авг. 7, 2012 11:45:05)
Офлайн
Добрый день,
Видимо речь идет о контроле версий, советую посмотреть django-reversion Мощная штука аналогов раньше не было
Отредактировано asava (Авг. 7, 2012 13:33:58)
Офлайн
fata1ex, asava спасибо. К сожалению, прямо сейчас нет возможности посмотреть, но вечером обязательно изучу эти варианты.
Офлайн
asava
нет, речь не о контроле версий
Офлайн
Dr.LivsiВелосипед получится совсем не сложный. Переопредели save у модели или повешай обработчик на сигнал pre_save или post_save.
Добрый день!
Есть система, в которой есть несколько десятков пользователей.
Эти несколько десятков пользователей редактируют одну модель, которая содержит несколько десятков тысяч строк.
Модель:
name1=CharField()
name2=CharField()
name1cat=ForeignKey(cat1)
name2cat=ForeignKey(cat2)
Нужна система, которая бы отслеживала какие пользователи какие именно корректировки внесли в модель (значения до внесения корректировок, значения после внесения, время корректировок).
Не хочется изобретать велосипед, поэтому хотелось бы спросить: существуют ли уже какие-то готовые системы, приложения для реализации данной задачи?
Офлайн
FishHookДа, в принципе, я к этому и пришел было. Но возникло несколько моментов. Если переопределять save - там возникает проблема с передачей userа, который этот save делает (собственно, если кто подскажет - буду благодарен -в будущем пригодится). Далее если делать через сигналы - там тоже не понятно, как в функцию обработчик добавлять информацию о юзере, который делает сохранение. Кроме того, вероятность того, что несколько user-ов будут корректировать один и тот же экземпляр модели очень высока а здесь уже лучше использовать update - а он не вызывает сигнал pre_save или post_save.Dr.LivsiВелосипед получится совсем не сложный. Переопредели save у модели или повешай обработчик на сигнал pre_save или post_save.
Добрый день!
Есть система, в которой есть несколько десятков пользователей.
Эти несколько десятков пользователей редактируют одну модель, которая содержит несколько десятков тысяч строк.
Модель:
name1=CharField()
name2=CharField()
name1cat=ForeignKey(cat1)
name2cat=ForeignKey(cat2)
Нужна система, которая бы отслеживала какие пользователи какие именно корректировки внесли в модель (значения до внесения корректировок, значения после внесения, время корректировок).
Не хочется изобретать велосипед, поэтому хотелось бы спросить: существуют ли уже какие-то готовые системы, приложения для реализации данной задачи?
model Stat(models.Model):
udate=...
user=ForeignKey(User)
name1cat_before=ForeignKey(Модель)
name2cat_before=ForeignKey(Модель)
name1cat_after=ForeignKey(Модель)
name2cat_after=ForeignKey(Модель)
Офлайн
Dr.LivsiFishHookДа, в принципе, я к этому и пришел было. Но возникло несколько моментов. Если переопределять save - там возникает проблема с передачей userа, который этот save делает (собственно, если кто подскажет - буду благодарен -в будущем пригодится). Далее если делать через сигналы - там тоже не понятно, как в функцию обработчик добавлять информацию о юзере, который делает сохранение. Кроме того, вероятность того, что несколько user-ов будут корректировать один и тот же экземпляр модели очень высока а здесь уже лучше использовать update - а он не вызывает сигнал pre_save или post_save.Dr.LivsiВелосипед получится совсем не сложный. Переопредели save у модели или повешай обработчик на сигнал pre_save или post_save.
Добрый день!
Есть система, в которой есть несколько десятков пользователей.
Эти несколько десятков пользователей редактируют одну модель, которая содержит несколько десятков тысяч строк.
Модель:
name1=CharField()
name2=CharField()
name1cat=ForeignKey(cat1)
name2cat=ForeignKey(cat2)
Нужна система, которая бы отслеживала какие пользователи какие именно корректировки внесли в модель (значения до внесения корректировок, значения после внесения, время корректировок).
Не хочется изобретать велосипед, поэтому хотелось бы спросить: существуют ли уже какие-то готовые системы, приложения для реализации данной задачи?
update - а он не вызывает сигнал pre_save или post_saveС чего это вы взяли? Вызывает, конечно.
Если переопределять save - там возникает проблема с передачей userа, который этот save делает (собственно, если кто подскажет - буду благодарен -в будущем пригодится).
# #base CBV View # try: from threading import local except ImportError: from django.utils._threading_local import local _thread_locals = local() class MyBaseView(object): def dispatch(self, request, *args, **kw): _thread_locals.request = request return super(MyBaseView, self).dispatch(request, *args, **kw) # # # View # # class SomeView(MyBaseView, UpdateView): pass # # # Model # # model Stat(models.Model): name1cat_before=ForeignKey(Модель) name2cat_before=ForeignKey(Модель) name1cat_after=ForeignKey(Модель) name2cat_after=ForeignKey(Модель) def save(self, *args, **kwargs): user=_thread_locals.request.user
Отредактировано FishHook (Сен. 3, 2012 13:58:21)
Офлайн
FishHook
update - а он не вызывает сигнал pre_save или post_save
С чего это вы взяли? Вызывает, конечно.
docs.djangoproject.com
Be aware that the update() method is converted directly to an SQL statement. It is a bulk operation for direct updates. It doesn't run any save() methods on your models, or emit the pre_save or post_save signals (which are a consequence of calling save()).
Отредактировано Dr.Livsi (Сен. 3, 2012 15:08:13)
Офлайн