Хранить, кто обновил модель Django Model из админки
У меня есть сценарий использования, в котором данные вставляются и обновляются только из админки django. Сейчас у меня есть несколько пользователей, которые имеют доступ к странице django admin. Я хочу иметь возможность хранить информацию о том, кто именно обновил или создал запись на странице django admin.
В идеале, я хочу добавить отдельный столбец к существующей модели.
models.py
class Links(models.Model):
link = models.URLField(unique=True)
created_at = models.DateTimeField(auto_now_add=True)
created_by = model.ForeignKey(UserModel)
updated_at = models.DateTimeField(auto_now=True)
updated_by = model.ForeignKey(UserModel)
Вы можете переопределить метод .save_model(…)
[Django-doc] для установки полей .updated_by
и .created_by
в зависимости от того, change
это True
или False
:
from django.contrib import admin
class LinkAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
if not change:
obj.created_by = request.user
obj.updated_by = request.user
return super().save_model(request, obj, form, change)
admin.site.register(Links, LinkAdmin)
Если вам нужно это для большого количества моделей, вы можете сделать миксин, а затем использовать его для всех видов моделей:
class CreateUpdateUserAdminMixin:
def save_model(self, request, obj, form, change):
if not change:
obj.created_by = request.user
obj.updated_by = request.user
return super().save_model(request, obj, form, change)
и затем использовать миксин с:
class LinkAdmin(CreateUpdateUserAdminMixin, admin.ModelAdmin):
pass
class OtherModelAdmin(CreateUpdateUserAdminMixin, admin.ModelAdmin):
pass
admin.site.register(Links, LinkAdmin)
admin.site.register(OtherModel, OtherModelAdmin)
Примечание: обычно модели Django присваивается сингулярное имя, поэтому
Link
вместо.Links