Я бы хотел, чтобы каждая модель моего приложения сохраняла пользователя, создавшего свои записи. Что я сделал:
class SomeModel(models.Model):
# ...
user = models.ForeignKey(User, editable = False)
class SomeModelAdmin(admin.ModelAdmin):
# ...
def save_model(self, request, obj, form, change):
# Get user from request.user and fill the field if entry not existing
Мой вопрос: поскольку существует целое приложение для аутентификации и истории пользователей, существует ли простой способ (возможно, более ориентированный или стандартизированный) использования какой-либо функции этого приложения вместо выполнения описанной выше процедуры для каждой модели?
Обновление:
Вот что я сделал. Это выглядит ужасно для меня. Пожалуйста, дайте мне знать, если есть умный способ сделать это.
Я расширил все модели, которые я хотел, чтобы эти модели были представлены на models.py:
class ManagerLog(models.Model):
user = models.ForeignKey(User, editable = False)
mod_date = models.DateTimeField(auto_now = True, editable = False, verbose_name = 'última modificação')
class Meta:
abstract = True
В admin.py я проделал то же самое со следующим классом:
def manager_log_save_model(self, request, obj, form, change):
obj.user = request.user
return obj
Затем мне также нужно переопределить save_model для каждой расширенной модели:
class ExtendedThing(ManagerLogAdmin):
# ...
def save_model(self, request, obj, form, change):
obj = manager_log_save_model(self, request, obj, form, change)
# ... other stuff I need to do here