开发者

How to implement Django model audit trail? How do you access logged in user in models save() method?

I want t开发者_开发技巧o keep track of the user who creates and then updates all of a given model's records. I have the "user" information in the logged in user's UserProfile (all users must be logged in to update these records).


It sounds like you're looking for django-reversion, which allows you to keep track of all changes to a given model, including some meta data about the change (e.g. who made it).


Django models do not (on purpose) have access to the request object. You must pass it to the model in a view.


The quickest way to set the user field automatically for all changes made in the admin, would be by overriding the save_model method in your admin class (from the Django docs):

class ArticleAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        obj.user = request.user
        obj.save()

Otherwise, you can use something like django-revision mentioned by Dominic Rodger.


I find django-simple-history very easy to use. Importantly, it has a customisation available for tracking reason of change which can be strategically used to get input from users for knowing the reason.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜