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日

相关文章

  • Django与AJAX实现网页动态数据显示的示例代码

    下面是“Django与AJAX实现网页动态数据显示的示例代码”的完整攻略。 1. 确定需求 首先,需要明确需要实现的功能。这个示例是要实现网页动态数据显示,即通过AJAX请求后台数据,把数据动态地展示在前端页面上。 2. 搭建Django开发环境 搭建Django开发环境的过程不在本攻略的讨论范围内,所以这里假设读者已经完成了Django环境的搭建。 3. …

    人工智能概论 2023年5月25日
    00
  • Tensorflow之梯度裁剪的实现示例

    下面是“Tensorflow之梯度裁剪的实现示例”的完整攻略。 什么是梯度裁剪? 梯度裁剪是一种常见的优化技巧,用于限制梯度的范围,避免梯度爆炸或消失。在深度学习中,梯度裁剪常用于RNN等网络中,比如LSTM、GRU等。 梯度裁剪的实现方法 Tensorflow提供了两种梯度裁剪的实现方式: 1. tf.clip_by_norm tf.clip_by_nor…

    人工智能概论 2023年5月25日
    00
  • python随机打印成绩排名表

    下面是Python随机打印成绩排名表的完整攻略: 1. 分析需求 我们需要一个程序,可以随机生成选定人数的成绩,然后根据成绩进行排名并打印出来。 2. 设计程序 参考以上分析后,我们可以设计一个程序来实现这个目标: 设置一个字典,用于保存每个学生的姓名和成绩。 通过随机函数来为每个学生生成一个随机数作为成绩。 将每个学生的姓名和成绩加入到字典中。 对所有学生…

    人工智能概览 2023年5月25日
    00
  • docker-compose+nginx部署前后端分离的项目实践

    下面我将详细讲解“docker-compose+nginx部署前后端分离的项目实践”的完整攻略。 环境准备 首先,我们需要准备以下环境: docker 17.06 或更高版本 docker-compose 1.14 或更高版本 构建后端应用镜像 我们可以使用 Dockerfile 构建后端应用镜像,示例如下: FROM openjdk:8-jre-alpin…

    人工智能概览 2023年5月25日
    00
  • python数字转对应中文的方法总结

    那么我将为您详细介绍如何将Python中的数字转换为对应的中文。 首先,我们可以用下面这个算法将阿拉伯数字转换为中文数字: 构建阿拉伯数字和中文数字的对应关系,包括数字0-9、10-12、100、1000、10000等; 将数字从右向左分组,每组包含4个数字; 对每组数字进行处理,首先判断是否包含0,如果有则不添加“零”;其次根据数值和组数确定数字的单位,例…

    人工智能概论 2023年5月25日
    00
  • SpringBoot 2.5.5整合轻量级的分布式日志标记追踪神器TLog的详细过程

    SpringBoot 2.5.5整合轻量级的分布式日志标记追踪神器TLog的详细过程 什么是TLog TLog是一个开源的轻量级分布式日志标记追踪神器,它可以实时追踪分布式系统中的调用链路、对外接口的流量及性能等,并生成详细的日志和统计数据供开发人员或运维人员分析定位问题。 TLog的特点 高性能:采用ByteBuf技术,避免了反复申请和释放内存的开销,减轻…

    人工智能概览 2023年5月25日
    00
  • Sentry错误日志监控使用方法解析

    Sentry错误日志监控使用方法解析 概述 Sentry是一款主要用于监控和记录应用程序错误的开源软件,它由 Python 实现,可以用于监控多种类型(例如 JavaScript、Python、PHP、Ruby等)的应用程序错误。本文将介绍 Sentry的使用方法,帮助开发者快速上手该工具进行错误日志监控。 Sentry的安装 Sentry支持多种安装方式,…

    人工智能概览 2023年5月25日
    00
  • 聊聊python的gin库的介绍和使用

    聊聊Python的gin库的介绍和使用 什么是gin库 gin库是由Google开发的一个工具库,主要用于依赖注入和参数配置。它提供了一种简单的方式来对Python应用程序进行配置和管理。 gin库的安装 可以通过pip来安装gin库,其命令如下所示: pip install gin-config gin库的基本使用 1. 使用字符串进行配置 可以使用字符串…

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