【发布时间】:2011-03-02 11:09:38
【问题描述】:
我希望我的应用程序的每个模型都存储创建其条目的用户。我做了什么:
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
【问题讨论】:
标签: django django-admin django-authentication