首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django Model Admin:如何自动分配和隐藏当前用户的created_by字段,并在保存后显示?

Django Model Admin是Django框架中的一个组件,用于管理和展示数据库模型的后台管理界面。在使用Django Model Admin时,可以通过自定义ModelAdmin类来实现自动分配和隐藏当前用户的created_by字段,并在保存后显示。

首先,需要在模型类中定义created_by字段,并将其设置为可选字段(null=True)。这样可以在保存模型实例时,自动将当前用户的信息赋值给created_by字段。

代码语言:txt
复制
from django.db import models
from django.contrib.auth.models import User

class MyModel(models.Model):
    # 其他字段...
    created_by = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)

接下来,在ModelAdmin类中重写get_form方法,通过request.user获取当前用户,并将其传递给表单类。这样在后台管理界面中创建或编辑模型实例时,表单类就可以获取到当前用户的信息。

代码语言:txt
复制
from django.contrib import admin

class MyModelAdmin(admin.ModelAdmin):
    def get_form(self, request, obj=None, **kwargs):
        form = super().get_form(request, obj, **kwargs)
        form.current_user = request.user
        return form

然后,在表单类中重写save方法,将当前用户的信息赋值给created_by字段。

代码语言:txt
复制
from django import forms

class MyModelForm(forms.ModelForm):
    def save(self, commit=True):
        instance = super().save(commit=False)
        instance.created_by = self.current_user
        if commit:
            instance.save()
        return instance

最后,在ModelAdmin类中指定自定义的表单类。

代码语言:txt
复制
class MyModelAdmin(admin.ModelAdmin):
    form = MyModelForm

通过以上步骤,就可以实现自动分配和隐藏当前用户的created_by字段,并在保存后显示。在应用场景方面,这个功能适用于需要记录模型实例创建者信息的情况,例如博客文章、评论等。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版(CDB):https://cloud.tencent.com/product/cdb_mysql
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 人工智能(AI):https://cloud.tencent.com/product/ai_services
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

完整 Django 零基础教程|初学者指南 - 第 3 部分 转自:维托尔·弗雷塔斯

该帖子 车型将拥有一个信息 场,这将是用于存储答复文本,在创建 日期时间字段主要用来订购帖子 一内主题 ,一个在更新 日期时间栏通知用户 何时以及是否编辑了给定帖子 。...这里我们有两条主要路径:用户点击“新话题”按钮创建新话题,或者用户点击话题查看或参与讨论。 “新话题”画面: ? 线框新主题 图 7:新主题屏幕 现在是主题屏幕,显示帖子讨论: ?...在 Post模型中,该 created_at字段有一个可选参数,auto_now_add设置为 True。这将指示 Django 在 Post创建对象时设置当前日期时间。...如果我们不为模型指定主键,Django自动为我们生成它。所以我们现在很好。在下一节中,您将更好地了解它是如何工作。 迁移模型 下一步是告诉 Django 创建数据库,以便我们可以开始使用它。...它代表我们应用程序模型的当前状态。在下一步中,Django 将使用此文件来创建表列。 迁移文件被翻译成 SQL 语句。

2.2K40

​第 07 篇:创作后台开启,请开始你表演!

应用版块下包含了该应用全部已经注册到 admin 后台 model,之前我们注册了 Post、Category Tag,所以显示是这三个 model显示名字就是 model 名字。...接下来是让应用下注册 model 显示为中文,既然应用是在 apps.py 中配置,那么 model 有关配置应该去找相对应 model 。...文章创建时间修改时间应该根据当前时间自动生成,而现在是由人工填写,还有就是文章作者应该自动填充为后台管理员用户,那么这些自动填充数据字段就不需要在新增文章表单中出现了。...django admin 已经自动帮我们生成了),而如果用户登录了我们站点,那么 django 就会将这个用户实例绑定到 request.user 属性上,我们可以通过 request.user 取到当前请求用户..., obj, form, change) 最后还剩下文章创建时间修改时间需要填充,一个想法我们可以沿用上面的思路,复写 save_model 方法,将创建 post 对象关联当前时间,但是这存在一个问题

1.1K20
  • Django Admin中上传`.msg`文件并预览内容实现教程

    :list_display readonly_fields: 我们设置了在Admin界面中显示文件名内容预览,同时内容预览字段是只读。...preview_content: 这个方法用于在Admin界面中显示.msg文件内容。我们直接返回保存内容,这样用户可以在Admin界面中预览邮件内容。4....添加文件上传字段为了在Admin界面中实现文件上传,我们需要在模型表单中添加一个临时文件字段。这个字段不会被保存到数据库中,但用于接收用户上传文件。...预览文件内容当用户Admin界面中上传.msg文件并保存时,文件内容会被提取并存储在数据库中。然后,这些内容会在Admin界面的preview_content字段显示用户。...总结在这篇教程中,我们探讨了如何Django Admin中实现.msg文件上传内容预览。通过使用pywin32库与Outlook进行交互,我们能够读取.msg文件内容,并将其存储在数据库中。

    8410

    Django 1.10中文文档-第一个应用Part7-自定义管理站点

    自定义管理表单 通过admin.site.register(Question)注册了QuestionDjango可以自动构建一个默认表单。如果您需要自定义管理表单外观功能。...在这个表单中,Question字段是一个select选择框,包含了当前数据库中所有的Question实例。Djangoadmin站点中,自动地将所有的外键关系展示为一个select框。...点击它,会弹出一个新增Question表单,类似Question自己添加表单。填入相关信息点击保存Django自动将该Question保存在数据库,并作为当前Choice关联外键对象。...过滤器显示筛选类型取决与你过滤字段,由于pub_data是DateTimeField,所以Django自动给出了“今天”、“过去7天”、“本月”、“今年”这几个选项。 这一切进展顺利。...自定义管理站点首页 在类似的情况下,您可能想要定制Django管理首页页面。默认情况下,管理站点首页显示所有INSTALLED_APPS内并在admin应用中注册过app,以字母顺序进行排序。

    3.6K60

    Django 1.10中文文档-第一个应用Part2-模型管理站点

    Django admin管理站点介绍 为您员工或客户生成管理网站用来添加,更改删除内容是繁琐工作,不需要太多创造力。因此,Django完全自动创建模型管理界面。...进入admin站点 使用在上一步中创建超级用户帐户登录。您应该会看到Django管理员索引页面: ? 您应该会看到几种类型可编辑内容:组用户。...每一种类型字段Django管理站点都知道如何显示它们; 每个DateTimeField字段都会有个方便JavaScript快捷方式。...在页面的底部,则是一些可选项按钮: Save —— 保存更改,并返回当前类型对象变更列表界面; Save and add another:保存当前修改,并加载一个新空白的当前类型对象表单...; Save and continue editing:保存当前修改,并重新加载该对象编辑页面; delete:弹出一个删除确认页面 如果“Date published”字段值和你在前面教程创建它时候不一致

    2.3K60

    django 1.8 官方文档翻译: 3-4-3 使用基于类视图处理表单

    使用基于类视图处理表单 表单处理通常有3 个步骤: 初始GET (空白或预填充表单) 带有非法数据POST(通常重新显示表单错误信息) 带有合法数据POST(处理数据并重定向) 你自己实现这些功能经常导致许多重复样本代码...如果给出queryset,则使用该查询集模型。 模型表单提供一个form_valid() 实现,它自动保存模型。如果你有特殊需求,可以覆盖它;参见下面的例子。...Changed in Django 1.8: 省略fields 属性在以前是允许,但是导致表单带有模型所有字段。...模型request.user 为了跟踪使用CreateView 创建一个对象用户,你可以使用一个自定义ModelForm 来实现这点。...在这个视图中,请确保你没有将created_by 包含进要编辑字段列表,并覆盖form_valid() 来添加这个用户: #views.py from django.views.generic.edit

    1.8K20

    37.Django1.11.6文档

    第二,你可以利用Django自动HTML转义。 本节其余部分描述自动转义是如何工作。 默认情况下,Django每个模板会自动转义每个变量输出。...权限授权 Django本身提供了一个简单权限系统。 它提供了一种为特定用户用户分配权限方法。 它被Djangoadmin站点使用,但欢迎你在你自己代码中使用。...如何登录用户 如果你有一个认证了用户,你想把它附带到当前会话中 - 这可以通过login()函数完成。...也就是说,list_editable中列出字段将在更改列表页面上显示为表单小部件,允许用户一次编辑保存多行。...覆盖此方法允许进行前或保存操作。 使用Model.save()调用super().save_model()来保存对象。

    24.3K80

    Django admin管理工具使用、定制及源码解析

    admin组件使用 Django 提供了基于 web 管理工具。 Django 自动管理工具是 django.contrib 一部分。...唯一区别就是 这种方法 是登录http://ip/admin/ 站点用户组在一起 ? 而第一种方法是分开。 5.通过当前登录用户过滤显示数据 官方文档介绍: ?...4.设置只读字段 在使用admin时候,ModelAdmin默认对于model操作只有增加,修改删除,但是总是有些字段是不希望用户来编辑。...,使之显示过滤数据 下面的代码表示,car字段会根据当前登录用户显示用户所拥有的车 1 2 3 4 5 class MyModelAdmin(admin.ModelAdmin.../ 默认django自动根据我们定义模型生成form给admin使用,使用到这个form地方分别是changeadd时候。

    4K40

    Django教程第1章 | 快速入门 | 基础知识

    自动admin 界面: Django 自动生成管理后台,使得管理操作数据库过程变得非常简单。开发者可以轻松地创建、修改删除数据库记录,而无需编写自定义管理界面。...表单处理: Django 提供了强大表单处理工具,使得用户输入验证处理变得更加简单。这对于开发 Web 表单处理用户提交数据非常有用。...T 表示模板 (Template):负责如何把页面(html)展示给用户。 V 表示视图(View):负责业务逻辑,并在适当时候调用 Model Template。...里面的 fields 属性定义了要显示字段。 由于该类对应是 Contact 数据模型,我们在注册时候,需要将它们一起注册。显示效果如下: 我们还可以将输入栏分块,每个栏也可以定义自己格式。...这里让 Advance 部分隐藏: Advance 部分旁边有一个 Show 按钮,用于展开,展开可点击 Hide 将其隐藏,如下图所示: 内联(Inline)显示 上面的 Contact 是 Tag

    26810

    Django admin 一些有用设置

    我们可以对该界面进行设置,主要包括列表筛选器。 1、记录列表基本设置 比较实用记录列表设置有显示字段、每页记录数排序等。 ?...唯一区别就是 这种方法 是登录http://ip/admin/  站点用户组在一起 ? 而第一种方法是分开。 5.通过当前登录用户过滤显示数据 官方文档介绍: ?...4.设置只读字段  在使用admin时候,ModelAdmin默认对于model操作只有增加,修改删除,但是总是有些字段是不希望用户来编辑。...5、数据保存时进行一些额外操作(通过重写ModelAdminsave_model实现) 代码: ?...(request, obj, form, change)   这样,在添加数据时,会自动保存申请人和备案号。

    2.6K70

    Python自动化开发学习-Django

    这里要注意,输入了新用户用户名、密码确认密码,就完成了用户创建,但是这个用户并不能登录。随后会有一个修改用户界面,都是中文就不细说了。...然后注册函数后面再把这个自己类作为参数加上,就可以按照我们设置显示字段内容了。...如果是多对多外键,需要用这个: filter_horizontal = () # 这里并没有多对多字段,就空着吧 这个效果可以参考用户权限分配用户组合用户权限操作,多选情况这么设置可以有更好体验...并且djangoUser表做了一对一关联。也就是用户认证信息用户其他信息拆开来,认证信息直接使用djangoUser表。另外这里还有个角色表,留着做账号权限管理。...(login_url='/accounts/login/') 上面在跳转到登录页面的同时,也会保存当前请求页面的url,默认是放在next参数里

    1.8K30

    关于“Python”Django 管理网站核心知识点整理大全52

    这里我们输 入是ll_admin,但你可以输入任何用户名,比如电子邮件地址,也可让这个字段为空(见2)。 你需要输入密码两次(见3)。 注意 可能会对网站管理员隐藏有些敏感信息。...向管理网站注册模型 Django自动在管理网站中添加了一些模型,如UserGroup,但对于我们创建模型,必须 手工进行注册。...现在,使用超级用户账户访问管理网站:访问http://localhost:8000/admin/,并输入你刚创建 超级用户用户密码,你将看到类似于图18-2所示屏幕。...这个网页让你能够添加修改 用户用户组,还可以管理与刚才定义模型Topic相关数据。...这种字段不需要长度限制,因为我们 不想限制条目的长度。属性date_added让我们能够按创建顺序呈现条目,并在每个条目旁边放置 时间戳。 在4处,我们在Entry类中嵌套了Meta类。

    16410

    django-db-comments: model移行时自动生成 table,column逻辑名称

    Django migrate迁移是 Django 将对模型model修改(例如增加一个字段,删除一个模型)应用至数据库架构中方式。生成移行文件时,自动差分。...表中图片移行数据库表,没有表名,列名注释图片django-db-comments:model移行时,自动作成伦理名(model コラム 論理名・コメント)django model field comment...in database可以将model中定义 【verbose_name】,【 help_text】添加到数据库表/列伦理名。...中追加 django-db-commentsINSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes...True, verbose_name='登録日時') updated_at = models.DateTimeField(auto_now=True, verbose_name='更新日時') created_by

    78400

    django 1.8 官方文档翻译: 1-2-2 编写你第一个Django应用,第2部分

    通常情况下,你每次修改过一个文件开发 服务器都会自动载入,但是创建一个新文件却不会触发自动载入逻辑。...不同模型字段类型 (DateTimeField, CharField) 会对应相应 HTML 输入控件。 每一种类型字段 Djaong 管理网站都知道如何显示它们。...在页面的底部还为你提供了几个选项: Save – 保存更改并返回到当前类型对象更改列表页面。 Save and continue editing – 保存更改并重新载入当前对象管理界面。...Save and add another – 保存更改并载入当前对象类型空白表单。 Delete – 显示删除确认页。...模板可以放在你文件系统任何地方,Diango 都能访问。 (Django 能以任何用户身份在你服务器上运行。) 然后,在你项目中保存模板是一个好习惯。

    2.5K40

    Django内置Admin

    Django内置Admin是对于model中对应数据表进行增删改查提供组件,使用方式有: 依赖APP: django.contrib.auth django.contrib.contenttypes...配置路由 1 2 3 urlpatterns = [         url(r'^admin/', admin.site.urls),     ] 当前配置路由可以创建一些路由映射关系: /admin...New in Django 1.10. 12. save_on_top = False,详细页面,在页面上方是否也显示保存删除等按钮 13. inlines,详细页面,如果有其他表当前表做FK,那么详细页面可以进行动态增加删除...= ('FK字段', 'M2M字段',) 17. fields,详细页面时,显示字段字段 1 2 3 @admin.register(models.UserInfo) class UserAdmin...: {'widget': MyTextarea},     } 27. prepopulated_fields = {},添加页面,当在某字段填入值自动会将值填充到指定字段

    1.5K90

    35.Django2.0文档

    在这个模式中, Model 代表数据存取层,View 代表是系统中选择显示什么怎么显示部分,Controller 指的是系统中根据用户输入并视需要访问模型,以决定使用哪个视图那部分。      ...M:数据存取部分,由django数据库层处理,本章要讲述内容。   V:选择显示哪些数据要显示以及怎样显示部分,由视图模板处理。   ...应用程序`` django.contrib.auth`` 包含自身`` admin.py`` ,所以UsersGroups能在管理工具中自动显示。...解释一下代码: 我们新建了一个类AuthorAdmin,它是从django.contrib.admin.ModelAdmin派生出来子类,保存着一个类自定义配置,以供管理工具使用。...如果你给某人编辑用户权限,他可以编辑自己权限,这种能力可能不是你希望。 赋予一个用户修改用户权限,本质上说就是把他变成一个超级用户。你也可以给组中分配用户

    11.3K100

    关于“Python”核心知识点整理大全59

    下面来修改模型Topic,在其中添加一个关联到用户外键。这样做,我们必须对数据库 进行迁移。最后,我们必须对有些视图进行修改,使其只显示当前登录用户相关联数据。 1....确定当前有哪些用户 我们迁移数据库时,Django将对数据库进行修改,使其能够存储主题用户之间关联。为 执行迁移,Django需要知道该将各个既有主题关联到哪个用户。...然后,我们查看到目前为止都创建了哪些用户 (见2)。输出中列出了三个用户:ll_admin、ericwillie。 在3处,我们遍历用户列表,并打印每位用户用户ID。...正如你看到,现在每个主题都属于用户ll_admin。 注意 你可以重置数据库而不是迁移它,但如果这样做,既有的数据都将丢失。一种不错做 法是,学习如何在迁移数据库同时确保用户数据完整性。...在这里,我们导入了异常Http404 (见1),并在用户请求它不能查看主题时引发这个异常。收到主题请求,我们在渲染网页前 检查该主题是否属于当前登录用户

    13710

    Django 3.1 官网学习路线

    也就是说,您需要自动生成一些建立 Django 项目的代码——Django 实例设置集合,包括数据库配置、特定于 Django 选项特定于应用程序设置。...上面的例子是为 PostgreSQL 生成。 表名是通过结合应用程序名称(投票)模型小写名称——问题选择——自动生成。(您可以重写此行为。) 主键(id)会自动添加。...不同模型字段类型(DateTimeField、CharField)对应于适当 HTML 输入小部件。每种类型字段都知道如何Django 管理中显示自己。...您将看到一个页面,其中列出了通过 Django 管理员对这个对象所做所有更改,以及更改者时间戳用户名: 第三部分 概览 视图是 Django 应用程序中 Web 页面的“类型”,通常提供特定功能特定模板...如果在该窗口中添加一个问题并单击“Save”,Django 会将该问题保存到数据库中,并在您正在查看“add choice”表单中动态地将其添加为选中选项。

    8.2K10

    Django源码学习-3-Model-中

    Django网络应用开发5项基础核心技术包括模型(Model设计,URL 设计与配置,View(视图)编写,Template(模板)设计Form(表单)使用。...参数类型 1、null=True 数据库中字段是否可以为空 2、blank=True djangoAdmin中添加数据时是否可允许空值 主键,对AutoField设置主键,就会代替原来默认自增id...列 3、primary_key=False 4、auto_nowauto_now_add   auto_now 自动创建---无论添加或修改,都是当前操作时间   auto_now_add 自动创建...就会在该行数据中增加一个ctime字段 uptime = models.DateTimeField(auto_now_add=True) #当前表任何一行数据有更新时,Django就会自动更新该字段...#upload_to='upload'表示用户上传数据存储位置,这里需要注意:在数据库中实际保存并不是文件,而是文件存放路径 img = models.ImageField(null

    71130
    领券