Django Admin:自动选择当前用户
--转载自:林肯李
该文章写的很好,特转载留待后期备用
背景
在开发 CMS 时,经常需要标记谁创建了记录。Django 为我们提供了一个很好的管理界面。但是当我们只使用默认值时,用户需要自己选择他们是谁。我们想为他们自动选择,他们不能假装是其他人。
代码
在 django models.py 中,我们有以下内容:
# 模型.py
class Notes(models.Model):
title = models.CharField(max_length=255)
content = models.TextField()
date = models.DateField()
created_by = models.ForeignKey(User, related_name="Created By")
我们希望为登录用户自动设置 created_by。
所以在我们的管理员中:
# admin.py class NotesAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'created_by':
kwargs['queryset'] = User.objects.filter(username=request.user.username)
return super(NotesAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) def get_readonly_fields(self, request, obj=None):
if obj is not None:
return self.readonly_fields + ('created_by',)
return self.readonly_fields def add_view(self, request, form_url="", extra_context=None):
data = request.GET.copy()
data['created_by'] = request.user
request.GET = data
return super(NotesAdmin, self).add_view(request, form_url="", extra_context=extra_context) admin.site.register(Notes, NotesAdmin)
解释
add_view 函数帮助我们从下拉列表中选择当前用户。
formfield_for_foreignkey 帮助我们过滤掉其他用户。
通过结合这两个函数,我们得到:
最后一个 get_readonly_fields 函数使该字段创建后无法编辑。
Django Admin:自动选择当前用户的更多相关文章
- python Django 学习笔记(五)—— Django admin自动管理界面
1,激活管理界面 修改settings.py MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.c ...
- C#自动选择出系统中最合适的IP地址
写这个是因为很长时间以来,碰到过很多次这个问题,但都没当回事,这次又碰到了这个老问题,无奈百度了一圈儿未果,身边又没有大牛可以请教,就自己先“总结”了一套方法,一来给自己记录,二来如果碰巧能有朋友看到 ...
- Django Admin save 重写 保存
在 django admin管理控制台中,用户按下"Save and add another",表单的字段值仍然填充最后插入的值 并且保存 在ModelAdmin中添加选项save ...
- Django Admin后台添加用户时出现报错:1452
如果在使用Django Admin后台添加用户时出现报错: (1452, 'Cannot add or update a child row: a foreign key constraint fai ...
- Django Admin 后台Admin继承UserAdmin增加用户密码不显示明文和用户登录不了的解决方法
Django后台Admin继承UserAdmin增加用户不显示明文方法 1.在 models.py 中用户表 # 导包规范-1.Python标准模块 from django.db import mod ...
- Django(66)admin后台管理注册用户
前言 我们使用django创建用户可以使用注册接口的方式,也可以使用django自带的后台管理系统,这里就介绍使用后台管理系统创建用户 admin后台管理系统 在使用之前我们可以使用第三方的插件,来美 ...
- Django admin 权威指南(一)
版本: Django 1.10 此部分由官方文档<6.5.1 The Django admin site>翻译而来. 6.5.1.1 概览 默认情况下,使用startproject的时候, ...
- django admin.py settings 操作
dango, 怎么说呢,什么东西都内置了,什么东西都是自己的东西.用过flask, cherrypy, web.py, pyramid 等等python 框架后,再选用dango 觉得,理念有很大的区 ...
- Django Admin的相关知识
一.面向对象复习 1.类的继承 class Base(object): def __init__(self,val): self.val = val def func(self): self.test ...
- django admin 设置(转载https://www.cnblogs.com/wumingxiaoyao/p/6928297.html)
Django admin 一些有用的设置 Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据.后台管理可以在各个app的admin.py文件中进行控制.以下是我最近摸 ...
随机推荐
- React时间转换为具体的年月日上午下午
export default class index extends Component { constructor() { super(); this.state = { date: new Dat ...
- elasticsearch 查询索引和清理索引命令
查询 curl --silent 'http://127.0.0.1:9200/_cat/indices' 删除 curl -X DELETE "localhost:9200/wifiloc ...
- 【Azure 应用服务】App Service for Linux 环境中为Tomcat页面修改默认的Azure 404页面
问题描述 在App Service Linux环境中,如部署Tomcat 应用后,如果访问的页面找不到,应用会返回一个由Azure生成的404页面,那么是否可以修改它呢? PS: 如果是App Ser ...
- 【Azure 应用服务】Azure App Service能否使用Storage Account File Share
问题描述 Azure App Service能否使用Storage Account File Share? 问题回答 如果部署的App Service为Linux环境,可以直接使用Mount stor ...
- Nebula Graph 在众安保险的图实践
本文首发于 Nebula Graph Community 公众号 互联网金融的借贷同传统信贷业务有所区别,相较于传统信贷业务,互联网金融具有响应快.数据规模大.风险高等特点.众安保险主要业务是做信用保 ...
- linux的内置crontab(定时任务)的简单介绍
编写定时任务的基本命令: #查看当前用户的crontab crontab -l: #编辑crontab任务 crontab -e: #删除crontab任务 crontab -r 定时任务 ...
- Linux环境下动态库的生成与使用
一.动态库的生成 定义 a.h.a.c 如下: a.h #include <stdio.h> #include <stdlib.h> void FuncA(); a.c #in ...
- windows下如何结束Tomcat进程
问题描述: 使用IDEA启动java中的SSM项目之后,服务正常运行.操作过程中不小心把IDEA 开发工具给关闭啦,导致tomcat没有正常停止,使用的端口8080仍然被占用.再次 打开IDEA,启动 ...
- 英语单词组件- 单词在句子中,上面显示中文下面显示音标 css样式
原先效果: 改进demo效果 优化点 音标长度超出,或者中文超出,总宽度会按照最长的走 居中显示 再次优化 line-height: 22px; 加入这个 对齐中间行(字号大小会让绝对上下高度,对不齐 ...
- TimeLine 时间轴 网站 分享 time.graphics - nodejs 10年图
话说20年 弹指一挥间 https://time.graphics/line/682014 nodejs 10年图 https://time.graphics/line/598790 资料 2022, ...