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获取GY-85九轴模块信息示例
Dec 05 Python
python列出目录下指定文件与子目录的方法
Jul 03 Python
Python中的FTP通信模块ftplib的用法整理
Jul 08 Python
详解Django之admin组件的使用和源码剖析
May 04 Python
对python中两种列表元素去重函数性能的比较方法
Jun 29 Python
对python3 一组数值的归一化处理方法详解
Jul 11 Python
python3.6的venv模块使用详解
Aug 01 Python
python DataFrame转dict字典过程详解
Dec 26 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
Mar 04 Python
Eclipse配置python默认头过程图解
Apr 26 Python
pytorch 限制GPU使用效率详解(计算效率)
Jun 27 Python
聊聊python中的循环遍历
Sep 07 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 cookie 作用范围?不要在当前页面使用你的cookie
2009/03/24 PHP
PHP curl_setopt()函数实例代码与参数分析
2011/06/02 PHP
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
2012/10/31 PHP
PHP实现的数据对象映射模式详解
2019/03/20 PHP
csdn 批量接受好友邀请
2009/02/19 Javascript
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
jquery实现相册一下滑动两次的方法
2015/02/09 Javascript
浅谈JavaScript字符串与数组
2015/06/03 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
2015/06/11 Javascript
angularjs创建弹出框实现拖动效果
2020/08/25 Javascript
AngularJS向后端ASP.NET API控制器上传文件
2016/02/03 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
2016/05/07 Javascript
基于bootstrap插件实现autocomplete自动完成表单
2016/05/07 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
JS实现简单的抽奖转盘效果示例
2019/02/16 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
vue Element左侧无限级菜单实现
2020/06/10 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
Python进程通信之匿名管道实例讲解
2015/04/11 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
2018/01/24 Python
BP神经网络原理及Python实现代码
2018/12/18 Python
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
2019/06/25 Python
pymysql 开启调试模式的实现
2019/09/24 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
2014/07/17 面试题
给排水专业应届生求职信
2013/10/12 职场文书
文明单位汇报材料
2014/12/24 职场文书
幼儿园小朋友毕业感言
2015/07/30 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
简历中的自我评价怎么写呢?
2019/04/30 职场文书
演讲稿之我的初心我的成长
2019/08/12 职场文书