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

yizhihongxing

实现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日

相关文章

  • vivo Z5x极光版值得买吗 vivo Z5x极光版开箱体验及评测

    vivo Z5x极光版值得买吗? vivo Z5x极光版是2020年的新品,相比普通版新增了极光色,在外观上非常吸引眼球。其它方面和普通版基本一致,下面分别从外观、性能、拍照和续航4个方面给出评价,帮助大家了解是否值得购买。 外观 vivo Z5x极光版的外观设计采用了极光色,闪耀迷人,非常耐看。背面采用了AG镀膜工艺,手感较为舒适,且能有效防止指纹的留下。…

    人工智能概览 2023年5月25日
    00
  • Django实现CAS+OAuth2的方法示例

    下面是Django实现CAS+OAuth2的方法示例的详细攻略。 简介 首先,我们需要了解一下CAS和OAuth2的概念。CAS(Central Authentication Service)是一种单点登录协议,可以让用户在一个网站上进行登录之后,在其他网站上自动登录,避免用户重复输入用户名和密码。OAuth2是一种授权协议,允许第三方应用程序通过授权代表用…

    人工智能概论 2023年5月25日
    00
  • 如何通过python实现人脸识别验证

    我们可以通过Python和OpenCV库来实现人脸识别验证。以下是完整的攻略步骤: 步骤一:安装所需库 首先要安装必要的Python库,包括: OpenCV Pillow numpy 你可以使用以下命令来安装这些库: pip install opencv-python pip install Pillow pip install numpy 步骤二:准备训练…

    人工智能概论 2023年5月25日
    00
  • tensorboard 可视化之localhost:6006不显示的解决方案

    当我们使用Tensorboard时,有时候会遇到localhost:6006不显示的问题。这可能是由许多不同的原因所导致的。本攻略将提供一些可能的解决方案。 确认Tensorboard已正确安装 在使用Tensorboard之前,我们需要先确认Tensorboard是否已经正确安装。我们可以在命令行中输入以下命令来检查: tensorboard –vers…

    人工智能概论 2023年5月25日
    00
  • Node.js Process对象详解

    Node.js Process对象详解 在Node.js中,process对象是一个全局变量,它提供了当前 Node.js 进程的信息以及控制该进程的方法。process对象是EventEmitter类的实例,因此,它也可以用来触发和监听事件。 process对象的常用属性 process.pid:当前进程的进程ID,类型为数字 process.versio…

    人工智能概论 2023年5月25日
    00
  • 一文教会你用nginx+uwsgi部署自己的django项目

    一文教会你用nginx+uwsgi部署自己的django项目 本文将详细讲解如何使用nginx和uwsgi部署自己的django项目,包括nginx和uwsgi的安装配置、django项目的配置和运行、以及一些常见问题和解决方案。 安装nginx和uwsgi 在部署django项目前,我们需要先安装nginx和uwsgi。以下是安装步骤: 安装nginx 更…

    人工智能概论 2023年5月25日
    00
  • Python3.6使用tesseract-ocr的正确方法

    Python3.6使用tesseract-ocr的正确方法 简介 在本文中,我们将详细讲解Python3.6使用tesseract-ocr的正确方法。tesseract-ocr是一个免费、开源的OCR引擎,可以将图像中的文本自动识别并转换为计算机可处理的文本。该OCR引擎非常适合Python这种高级编程语言,并且可以在Windows、Linux和MacOS等…

    人工智能概览 2023年5月25日
    00
  • docker搭建mongodb单节点副本集的实现

    下面我就详细分享一下如何使用Docker搭建MongoDB单节点副本集的实现。 前置条件 在进行下一步操作之前,请确保已经安装并配置好了Docker和Docker Compose。 步骤一:创建项目目录 首先,我们需要在本地创建一个项目目录,例如: mkdir mongodb cd mongodb 步骤二:创建docker-compose.yml文件 然后,…

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