我希望我的应用的每个模型都能存储创建其条目的用户。我做了什么:
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
答案 0 :(得分:3)
更简单的方法,使用save_model
class MyAdmin(admin.ModelAdmin):
...
def save_model(self, request, obj, form, change):
if getattr(obj, 'author', None) is None:
obj.author = request.user
obj.save()
见:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_model
答案 1 :(得分:1)
我认为你应该查看django packages section on versioning。所有这些应用都会跟踪您的模型所做的更改,以及何时进行更改。