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 20 Python
python实现感知器
Dec 19 Python
django 按时间范围查询数据库实例代码
Feb 11 Python
PyQt5每天必学之工具提示功能
Apr 19 Python
python实现烟花小程序
Jan 30 Python
Python通过for循环理解迭代器和生成器实例详解
Feb 16 Python
解决Python对齐文本字符串问题
Aug 28 Python
Python包,__init__.py功能与用法分析
Jan 07 Python
python里的单引号和双引号的有什么作用
Jun 17 Python
详解Python中第三方库Faker
Sep 25 Python
在python中对于bool布尔值的取反操作
Dec 11 Python
Pycharm在指定目录下生成文件和删除文件的实现
Dec 28 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
PHP strtok()函数的优点分析
2010/03/02 PHP
Php output buffering缓存及程序缓存深入解析
2013/07/15 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
CSS+Jquery实现页面圆角框方法大全
2009/12/24 Javascript
原始的js代码和jquery对比体会
2013/09/10 Javascript
JavaScript实现的一个倒计时的类
2015/03/12 Javascript
javascript白色简洁计算器
2015/05/04 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
Bootstrap下拉菜单效果实例代码分享
2016/06/30 Javascript
利用Angularjs和bootstrap实现购物车功能
2016/08/31 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
javascript Function函数理解与实战
2017/12/01 Javascript
jQuery时间戳和日期相互转换操作示例
2018/12/07 jQuery
跟混乱的页面弹窗说再见
2019/04/11 Javascript
layui使用form表单实现post请求页面跳转的方法
2019/09/14 Javascript
微信小程序 scroll-view 实现锚点跳转功能
2019/12/12 Javascript
React实现类似淘宝tab居中切换效果的示例代码
2020/06/02 Javascript
Python 遍历列表里面序号和值的方法(三种)
2017/02/17 Python
Django中Model的使用方法教程
2018/03/07 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
2018/06/26 Python
Python实现将数据写入netCDF4中的方法示例
2018/08/30 Python
django xadmin中form_layout添加字段显示方式
2020/03/30 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
通过css3动画和opacity透明度实现呼吸灯效果
2019/08/09 HTML / CSS
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
处理textarea中的换行和空格
2019/12/12 HTML / CSS
30年同学聚会感言
2014/01/30 职场文书
人力资源部门的主要职能
2014/02/22 职场文书
团队经理竞聘书
2014/03/31 职场文书
商务英语专业大学生职业生涯规划书
2014/09/14 职场文书
2014年后备干部工作总结
2014/12/08 职场文书
2015年派出所民警工作总结
2015/04/24 职场文书
《刷子李》教学反思
2016/02/20 职场文书
Python中的套接字编程是什么?
2021/06/21 Python
springboot临时文件存储目录配置方式
2021/07/01 Java/Android