django-xadmin根据当前登录用户动态设置表单字段默认值方式


Posted in Python onMarch 13, 2020

相信你一定会设置一个普通字段的默认值:

class Offer(models.Model):
salary = models.CharField(max_length=64, blank=True, default='6000', verbose_name='薪资待遇')

相信你还能动态设置外键字段的默认值:

class Interview(models.Model):
  department = models.ForeignKey('departments.Department', related_name='interview',
                  on_delete=models.PROTECT, default=get_department, verbose_name='面试部门')
 
def get_department():
  department = Department.objects.get(name='管理部')
  return department.id

但是以上都是从数据库模型层面修改,数据层面的修改有个缺点,就是针对所有用户都设置成同一个默认值

如果我想根据当前登录用户的身份来动态设置默认值呢?

要解决这个问题就不能从数据库层面来设置了,而要在adminx.py文件中去设置。

class Interview(models.Model):
  hruser = models.ForeignKey(HrUser, related_name='interview', on_delete=models.PROTECT, verbose_name='姓名')
  department = models.ForeignKey('departments.Department', related_name='interview', on_delete=models.PROTECT, verbose_name='面试部门')
  creator = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='creator', on_delete=models.PROTECT, verbose_name='创建者')
 
@register(Interview)
class InterviewAdmin(InterviewSrv):
  list_display = ('hruser', 'status', 'department', 'creator', ...)
  list_per_page = 50
  ...
  # 需要重写instance_forms方法,此方法作用是生成表单实例
  def instance_forms(self):
    super().instance_forms()
    # 判断是否为新建操作,新建操作才会设置creator的默认值
    if not self.org_obj:
      self.form_obj.initial['creator'] = self.request.user.id

最终效果:

创建者会根据当前登录用户自动填入

django-xadmin根据当前登录用户动态设置表单字段默认值方式

补充知识:Django通过Ajax利用FormData动态提交表单(包括文件,字符串)

0 需求背景

有的时候我们上传表单,经过后台处理之后再分发回原来页面,这时必定会刷新这个页面。为了解决这个问题,我们采用JS动态提交表单元素,如:file、text等类型,可以很好的解决这一问题。

1 DOM结构

<form method="post" enctype="multipart/form-data"">
 <input id="subject" type="text" class="form-control" >
 <input id="excels" type="file">
 <select class="form-control" id="models">
 <option>model0</option>
 <option>model1</option>
 </select>
 <input id="con" type="file">
 <input type="button" id="showyulan" value="上传">
</form>

2 JS代码

$('#showyulan').click(function () {
    var formData = new FormData();
    formData.append('subject', $('#subject').val())
    formData.append('excels', document.getElementById("excels").files[0])
    formData.append('models', $('#models').val())
    formData.append('con', document.getElementById("con").files[0])
    formData.append('qunfasum', $('#qunfasum').val())
    formData.append('jiange', $('#jiange').val())
    formData.append('yuming', $('#yuming').val())
    formData.append('duankou', $('#duankou').val())

    $.ajax({
        url:"/showyulan/",
        type:"POST",
        data:formData,
        processData:false,
        contentType:false,
        success: function (data) {
          alert(data)
        }
    })
  })

3 Django后台代码

def showyulan(request):
  subject = request.POST.get('subject')

  f1 = request.FILES.get('excels')
  
  # 文件保存路径
  fname = '%s/excel/%s' % (settings.MEDIA_ROOT, f1.name)
  with open(fname, 'wb') as pic:
    for c in f1.chunks():
      pic.write(c)

  models = request.POST.get('models')

  f2 = request.FILES.get('con')
  
  # 文件保存路径
  fname = '%s/text/%s' % (settings.MEDIA_ROOT, f2.name)
  with open(fname, 'wb') as pic:
    for c in f2.chunks():
      pic.write(c)
      
  return HttpResponse('上传成功!')

以上这篇django-xadmin根据当前登录用户动态设置表单字段默认值方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python爬虫入门教程--正则表达式完全指南(五)
May 25 Python
Python:Scrapy框架中Item Pipeline组件使用详解
Dec 27 Python
python3调用R的示例代码
Feb 23 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
Apr 05 Python
Pycharm 创建 Django admin 用户名和密码的实例
May 30 Python
Python实现按逗号分隔列表的方法
Oct 23 Python
pycharm创建一个python包方法图解
Apr 10 Python
Django数据库类库MySQLdb使用详解
Apr 28 Python
详解django实现自定义manage命令的扩展
Aug 13 Python
numpy:找到指定元素的索引示例
Nov 26 Python
termux中matplotlib无法显示中文问题的解决方法
Jan 11 Python
python中使用np.delete()的实例方法
Feb 01 Python
在django项目中导出数据到excel文件并实现下载的功能
Mar 13 #Python
Django choices下拉列表绑定实例
Mar 13 #Python
django model object序列化实例
Mar 13 #Python
浅析python标准库中的glob
Mar 13 #Python
Python3标准库glob文件名模式匹配的问题
Mar 13 #Python
python编写俄罗斯方块
Mar 13 #Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
Mar 13 #Python
You might like
Laravel框架学习笔记(一)环境搭建
2014/10/15 PHP
CI框架装载器Loader.php源码分析
2014/11/04 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
php 5.4 全新的代码复用Trait详解
2017/01/05 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
2020/01/07 PHP
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
2011/09/22 Javascript
iframe父页面获取子页面参数的方法
2014/02/21 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
2014/11/12 Javascript
AngularJS中的Promise详细介绍及实例代码
2016/12/13 Javascript
Angular之指令Directive用法详解
2017/03/01 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
2017/12/01 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
JS实现的类似微信聊天效果示例
2019/01/29 Javascript
Vue学习笔记之计算属性与侦听器用法
2019/12/07 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
2020/08/19 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
[00:35]DOTA2上海特级锦标赛 Newbee战队宣传片
2016/03/03 DOTA
Python 包含汉字的文件读写之每行末尾加上特定字符
2016/12/12 Python
Python编程修改MP3文件名称的方法
2017/04/19 Python
python编程之requests在网络请求中添加cookies参数方法详解
2017/10/25 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
Python Matplotlib实现三维数据的散点图绘制
2019/03/19 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
通过 Django Pagination 实现简单分页功能
2019/11/11 Python
深入解析HTML5 Canvas控制图形矩阵变换的方法
2016/03/24 HTML / CSS
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
女士鞋子、包包和服装在线,第一款10美元:ShoeDazzle
2019/07/26 全球购物
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
药物学专业学生的自我评价
2013/10/27 职场文书
大学生表扬信范文
2014/01/09 职场文书
给分销商的致歉信
2014/01/14 职场文书
元旦晚会活动总结
2014/07/09 职场文书
2015初中政治教学工作总结
2015/07/21 职场文书
欢送领导祝酒词
2015/08/12 职场文书
详解Redis瘦身指南
2021/05/26 Redis