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编写的最短路径算法
Mar 25 Python
Python字符和字符值(ASCII或Unicode码值)转换方法
May 21 Python
简单了解python中对象的取反运算符
Jul 01 Python
Python GUI学习之登录系统界面篇
Aug 21 Python
Python 导入文件过程图解
Oct 15 Python
pytorch逐元素比较tensor大小实例
Jan 03 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
Jan 15 Python
浅谈Python中threading join和setDaemon用法及区别说明
May 02 Python
Python run()函数和start()函数的比较和差别介绍
May 03 Python
python不到50行代码完成了多张excel合并的实现示例
May 28 Python
python help函数实例用法
Dec 06 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
Jan 25 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
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
php的ajax简单实例
2014/02/27 PHP
PHP实现一个简单url路由功能实例
2016/11/05 PHP
用 JSON 处理缓存
2007/04/27 Javascript
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
灵活应用js调试技巧解决样式问题的步骤分享
2012/03/15 Javascript
javascript编码的几个方法详细介绍
2013/01/06 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
JavaScript数据类型检测代码分享
2015/01/26 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
省市区三级联动下拉框菜单javascript版
2015/08/11 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
2016/07/18 Javascript
常用的js方法合集
2017/03/10 Javascript
利用vue开发一个所谓的数独方法实例
2017/12/21 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
[43:58]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第一场 1月8日
2021/03/11 DOTA
python使用正则表达式替换匹配成功的组
2017/11/17 Python
python操作excel文件并输出txt文件的实例
2018/07/10 Python
python如何实现异步调用函数执行
2019/07/08 Python
5分钟弄清楚html5的drag and drop(小结)
2019/04/10 HTML / CSS
C++是不是类型安全的
2014/02/18 面试题
ASP.NET中的身份验证有那些
2012/07/13 面试题
幼师自我鉴定范文
2013/10/01 职场文书
博士生入学考试推荐信
2013/11/17 职场文书
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
成人继续教育实施方案
2014/03/01 职场文书
一位农村小子的自荐信
2014/04/07 职场文书
教师党员个人整改措施
2014/10/27 职场文书
2014年宣传部工作总结
2014/11/12 职场文书
2014年服务行业工作总结
2014/11/18 职场文书
JavaScript实现复选框全选功能
2021/04/11 Javascript
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫
前端canvas中物体边框和控制点的实现示例
2022/08/05 Javascript