python,from django.contrib.auth.models import User,from django.db import modelsclass MyModel(models.Model):, user = models.ForeignKey(User, on_delete=models.CASCADE), # 其他字段...,
` 2. 在你的admin.py中重写ModelAdmin的save_model方法:,
` python,from django.contrib import admin,from .models import MyModelclass MyModelAdmin(admin.ModelAdmin):, def save_model(self, request, obj, form, change):, if not obj.pk:, obj.user = request.user, obj.save()admin.site.register(MyModel, MyModelAdmin),
“这样,当通过Django Admin添加数据时,会自动将当前登录的用户记录到user字段中。
在Django admin中添加数据时,自动记录创建或修改数据的user到表中的实现可以通过重写ModelAdmin类的save_model方法来实现,以下是详细的步骤和示例代码:
确保你的模型中有一个字段来存储user信息,例如created_by
和updated_by
字段。
from django.db import models from django.contrib.auth.models import User class MyModel(models.Model): name = models.CharField(max_length=100) created_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='created_items') updated_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='updated_items', null=True, blank=True) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) def __str__(self): return self.name
创建一个自定义的ModelAdmin类,并重写save_model
方法,以便在保存模型实例时自动记录当前用户。
from django.contrib import admin from .models import MyModel class MyModelAdmin(admin.ModelAdmin): def save_model(self, request, obj, form, change): if not obj.pk: # 如果是新创建的对象 obj.created_by = request.user else: # 如果是更新的对象 obj.updated_by = request.user obj.save() 注册到admin中 admin.site.register(MyModel, MyModelAdmin)
确保你已经正确配置了URL和权限,以便管理员可以访问和编辑这些数据。
from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), ]
当你通过Django admin界面添加或更新MyModel
的实例时,created_by
和updated_by
字段将会自动填充为当前登录的用户。
Q1: 如果我想记录更多关于操作的信息,比如操作时间,我该怎么做?
A1: 你可以在save_model
方法中添加更多的逻辑来记录额外的信息,你可以添加一个action_time
字段,并在保存对象时设置这个字段的值。
Q2: 如果我需要在多个模型中实现这个功能,我需要为每个模型都写一个自定义的ModelAdmin吗?
A2: 是的,你需要为每个模型都写一个自定义的ModelAdmin类,不过,你可以通过继承和复用代码来减少重复工作,你可以创建一个基类来实现通用的逻辑,然后在子类中继承这个基类。
通过上述步骤,你可以轻松地在Django admin中添加数据时自动记录user到表中,这不仅有助于追踪数据的变更历史,还能提高系统的安全性和可审计性,希望这篇文章对你有所帮助!