Что-то вроде
- created_by
- created_date
- MODIFIED_BY
- MODIFIED_DATE
Будет очень распространенным шаблоном для большого количества таблиц.
1) Вы можете автоматически установить созданную дату (но не другие) в model.py с помощью
created_date = models.DateTimeField(auto_now_add=True, editable=False)
2) Вы могли бы создать/измененные даты (но не через /user, так как не иметь контекста запроса) в model.py с
def save(self):
if self.id:
self.modified_date = datetime.now()
else:
self.created_date = datetime.now()
super(MyModel,self).save()
3) Вы можете установить созданную/модифицированную дату и в admin.py - но это не касается обновлений не admin
def save_model(self, request, obj, form, change):
if change:
obj.modified_by = request.user
obj.modified_date = datetime.now()
else:
obj.created_by = request.user
obj.created_date = datetime.now()
obj.save()
4) И последнее место будет в view.py, который может выполнять все 4, но не распространяется на обновления администратора.
Таким образом, реалистично должна быть разбросана логика, минимально повторяемая в 3 и 4 (или метод на модели, вызванной из обоих, которая будет пропущена)
Чем лучше? (Я работаю с python/django в течение нескольких дней, поэтому легко можно было бы пропустить что-то очевидное)
- Можете ли вы сделать что-то вроде @login_required, например. @audit_changes
- Можете ли вы получить доступ к запросу и текущему пользователю в модели и централизовать там логику?