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

实现django admin添加数据自动记录user到表中的方法,可以通过重载视图函数或使用信号实现。以下是详细攻略:

  1. 重载视图函数的实现方法

在django的admin视图中,可以通过获取当前请求的user,然后将其保存到特定的表中。首先,创建一个Mixin类,并且在其中添加特定的函数,使其能够记录用户信息。示例代码:

# accounts/mixin.py
from django.contrib.auth.mixins import AccessMixin

class UserRecordMixin(AccessMixin):
    def form_valid(self, form):
        form_object = form.save(commit=False)

        # 如果数据库定义username属性,可以使用form.cleaned_data.get('username')获取
        form_object.user = self.request.user

        form_object.save()

        return super().form_valid(form)

上述代码中,我们从django内置的AccessMixin类继承并重载了form_valid函数。form_valid方法会在form验证成功后自动调用,将已验证的form保存。

需要注意,如果你在表单中使用ModelChoiceField或其他特殊的Form fields,使用commit=False后的model实例可能并不会被分配一个正确的值。

  1. 使用信号的实现方法

除了重载视图函数,还可以使用django内置的信号处理机制来实现自动记录用户信息的功能。示例代码:

# accounts/signals.py
from django.contrib.auth.signals import user_logged_in
from django.dispatch import receiver
from django.contrib.admin.options import BaseModelAdmin

class UserRecordMixin(BaseModelAdmin):
    def save_model(self, request, obj, form, change):
        obj.user = request.user
        super().save_model(request, obj, form, change)

@receiver(user_logged_in)
def user_login_callback(sender, request, user, **kwargs):
    request.session['_auth_user_id'] = user.pk


# blog/admin.py
from django.db import models
from django.contrib.auth.models import User
from django.contrib import admin
from blog.models import Post
from accounts.signals import UserRecordMixin

@admin.register(Post)
class PostAdmin(UserRecordMixin, admin.ModelAdmin):
    list_display = ('title', 'user')
    # ...

在上述示例代码中,我们使用了receiver装饰器,并连接user_logged_in信号。当用户登录后该信号会自动被触发。我们在定义的回调函数中设置了session,以记录当前登录的用户。

UserCreateMixin类中,我们利用了BaseModelAdmin类来扩展章表的数据保存逻辑,将当前登录用户存储到对应的表中。

最后,在PostAdmin中,我们通过UserCreateMixin的继承和重写save_model函数将当前用户添加到Post模型中。

总结

以上是django admin添加数据自动记录user到表中的实现方法,通过重载视图函数或使用信号,能够较为方便方式自动记录用户信息。使用信号还可以较为方便地扩展该自动记录功能到所有模型,避免重复实现相似的代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django admin添加数据自动记录user到表中的实现方法 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Java发起http请求的完整步骤记录

    下面是Java发起http请求的完整步骤记录的详细攻略: 1. 引入http请求依赖 Java中发起http请求需要引入相应的依赖,一般推荐使用Apache的HttpComponents组件,可以在pom.xml中加入以下依赖: <dependencies> <dependency> <groupId>org.apache…

    人工智能概论 2023年5月25日
    00
  • 使用Mongodb实现打卡签到系统的实例代码

    首先我们需要了解一下Mongodb是什么。 Mongodb是一个流行的NoSQL数据库,它以面向文档的方式存储数据,而不是以行和列的形式。Mongodb的数据格式是BSON(Binary JSON)。Mongodb可扩展性强,支持高可用性和自动分片等高级功能。 在本文中,我们将使用Mongodb实现一个简单的打卡签到系统。该系统将记录员工在不同时间点签到的信…

    人工智能概论 2023年5月25日
    00
  • Nginx的c30k问题解决方法

    Nginx 的 c30k(同时支持 3 万个并发连接)问题是业界广泛关注和讨论的话题。在高并发场景下,单个 Nginx 实例可能会遇到瓶颈,无法继续扩展,因此需要进行分布式部署和负载均衡。下面就来讲一讲 Nginx 的 c30k 问题解决方法及相关注意事项: 1. 使用多核CPU 多核 CPU 是实现 c30k 的基础,Nginx 能够将请求分布到不同的 C…

    人工智能概览 2023年5月25日
    00
  • python中24小时制转换为12小时制的方法

    标题:Python中24小时制转换为12小时制的方法 在Python中,对于时间的表示,我们通常采用24小时制,也就是小时数范围是0~23。但是,在一些场合下,我们需要采用12小时制,也就是小时数范围是1~12,上午或下午根据具体时间来判断。本文将详细介绍如何将Python中的24小时制时间转换为12小时制时间。 代码实现 方法1:使用datetime模块 …

    人工智能概论 2023年5月25日
    00
  • Python使用Pillow进行图像处理

    下面是使用Pillow进行图像处理的攻略: 什么是Pillow Pillow是Python图像处理的库,它支持的图片格式十分丰富,如JPEG、PNG、BMP、GIF、ICO、TIFF等。 安装Pillow 要安装Pillow,可以使用以下命令: pip install Pillow 使用Pillow进行图像处理 打开图片 使用Pillow打开图片非常简单,只…

    人工智能概览 2023年5月25日
    00
  • Qt实现文本编辑器(二)

    下面我会详细讲解“Qt实现文本编辑器(二)”的完整攻略。该攻略主要分为以下几个部分: 设置界面 定义窗口类 定义文本编辑器类 定义菜单栏、工具栏 实现快捷键功能 实现查找、替换功能 实现撤销、重做功能 实现文件操作功能 其中,步骤二、三、八为主要内容。下面我会对这几个部分逐一进行讲解。 1. 设置界面 在工具->Qt Design页面中,设置文本编辑器…

    人工智能概览 2023年5月25日
    00
  • Django实现发送邮件找回密码功能

    下面我将为您详细讲解“Django实现发送邮件找回密码功能”的完整攻略。 1.安装依赖Django自带有邮件发送功能,但是需要SMTP的支持,因此需要在项目中安装django-smtp-ssl库来发送邮件。可以使用以下命令进行安装: pip install django-smtp-ssl 配置邮件发送 在settings.py文件中添加SMTP的配置信息,代…

    人工智能概览 2023年5月25日
    00
  • pytorch中的weight-initilzation用法

    下面我将为您详细讲解pytorch中的weight-initilzation用法的完整攻略。 什么是weight initialization weight initialization指的是神经网络权重初始化的方法。在神经网络中,权重对于模型的训练和性能至关重要。适当的权重初始化可以加快训练速度,提高模型精度。 通常,我们可以采用随机初始化的方式来对神经网…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部