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 相关文章推荐
PyQt5每天必学之像素图控件QPixmap
Apr 19 Python
mac安装scrapy并创建项目的实例讲解
Jun 13 Python
Python自然语言处理 NLTK 库用法入门教程【经典】
Jun 26 Python
Numpy之文件存取的示例代码
Aug 03 Python
Python标准库使用OrderedDict类的实例讲解
Feb 14 Python
python 设置输出图像的像素大小方法
Jul 04 Python
Django框架基础模板标签与filter使用方法详解
Jul 23 Python
Python如何基于selenium实现自动登录博客园
Dec 16 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
Mar 09 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
Jun 06 Python
Python 连接 MySQL 的几种方法
Sep 09 Python
使用Pytorch搭建模型的步骤
Nov 16 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
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
2009/06/08 PHP
PHP遍历二维数组的代码
2011/04/22 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
codeigniter显示所有脚本执行时间的方法
2015/03/21 PHP
php自定义时间转换函数示例
2016/12/07 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
2008/12/19 Javascript
jquery中的 $(&quot;#jb51&quot;)与document.getElementById(&quot;jb51&quot;) 的区别
2011/07/26 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
2017/06/30 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
JavaScript函数节流和函数去抖知识点学习
2018/07/31 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
Vue登录主页动态背景短视频制作
2019/09/21 Javascript
centos 下面安装python2.7 +pip +mysqld
2014/11/18 Python
Python实现的简单文件传输服务器和客户端
2015/04/08 Python
Python栈类实例分析
2015/06/15 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
Flask入门之上传文件到服务器的方法示例
2018/07/18 Python
基于python实现学生管理系统
2018/10/17 Python
pycharm设置鼠标悬停查看方法设置
2019/07/29 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
详解如何在css中引入自定义字体(font-face)
2018/05/17 HTML / CSS
蒂娜商店:Tiina the Store
2019/12/07 全球购物
项目合作协议书范本
2014/04/16 职场文书
活动总结怎么写
2014/04/28 职场文书
爱情保证书大全
2014/04/29 职场文书
材料物理专业求职信
2014/09/01 职场文书
2019奶茶店创业计划书范本!
2019/07/15 职场文书
nginx对http请求处理的各个阶段详析
2021/03/31 Servers
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏