当前位置:首页 > 行业动态 > 正文

django admin添加数据自动记录user到表中的实现

在Django Admin中,可以通过重写ModelAdmin的save_model方法来自动记录当前用户到模型表中。以下是实现步骤:1. 在你的models.py中定义一个字段来存储用户信息“ 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_byupdated_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

创建一个自定义的ModelAdmin类,并重写save_model方法,以便在保存模型实例时自动记录当前用户。

django admin添加数据自动记录user到表中的实现

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和权限

确保你已经正确配置了URL和权限,以便管理员可以访问和编辑这些数据。

from django.urls import path, include
urlpatterns = [
    path('admin/', admin.site.urls),
]

测试功能

当你通过Django admin界面添加或更新MyModel的实例时,created_byupdated_by字段将会自动填充为当前登录的用户。

FAQs

Q1: 如果我想记录更多关于操作的信息,比如操作时间,我该怎么做?

django admin添加数据自动记录user到表中的实现

A1: 你可以在save_model方法中添加更多的逻辑来记录额外的信息,你可以添加一个action_time字段,并在保存对象时设置这个字段的值。

Q2: 如果我需要在多个模型中实现这个功能,我需要为每个模型都写一个自定义的ModelAdmin吗?

A2: 是的,你需要为每个模型都写一个自定义的ModelAdmin类,不过,你可以通过继承和复用代码来减少重复工作,你可以创建一个基类来实现通用的逻辑,然后在子类中继承这个基类。

django admin添加数据自动记录user到表中的实现

小编有话说

通过上述步骤,你可以轻松地在Django admin中添加数据时自动记录user到表中,这不仅有助于追踪数据的变更历史,还能提高系统的安全性和可审计性,希望这篇文章对你有所帮助!