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 相关文章推荐
30分钟搭建Python的Flask框架并在上面编写第一个应用
Mar 30 Python
python实现百万答题自动百度搜索答案
Jan 16 Python
Python Paramiko模块的使用实际案例
Feb 01 Python
对Python多线程读写文件加锁的实例详解
Jan 14 Python
Python函数定义及传参方式详解(4种)
Mar 18 Python
python模块常用用法实例详解
Oct 17 Python
python cv2截取不规则区域图片实例
Dec 21 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
Apr 07 Python
pytorch读取图像数据转成opencv格式实例
Jun 02 Python
Python监听剪切板实现方法代码实例
Nov 11 Python
python自动从arxiv下载paper的示例代码
Dec 05 Python
Python爬虫基础讲解之请求
May 13 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
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
php中的字符编码转换函数用法示例
2014/10/20 PHP
启用Csrf后POST数据时出现的400错误
2015/07/05 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
javascript GUID生成器实现代码
2009/10/31 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
多种方法实现load加载完成后把图片一次性显示出来
2014/02/19 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
JavaScript中匿名函数用法实例
2015/03/23 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
JavaScript制作弹出层效果
2016/12/02 Javascript
微信小程序 蓝牙的实现实例代码
2017/06/27 Javascript
JQuery判断radio单选框是否选中并获取值的方法
2019/01/17 jQuery
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
[15:56]Heroes18_暗影萨满(完美)
2014/10/31 DOTA
[47:10]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第二场 12.16
2020/12/18 DOTA
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
Python实现多线程抓取妹子图
2015/08/08 Python
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
Python实现Kmeans聚类算法
2020/06/10 Python
Django 实现Admin自动填充当前用户的示例代码
2019/11/18 Python
关于Python-faker的函数效果一览
2019/11/28 Python
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
英国手工布艺沙发在线购买:Sofas & Stuff
2018/03/02 全球购物
主题酒店策划书
2014/01/28 职场文书
幼儿园运动会加油词
2014/02/14 职场文书
学习经验交流会主持词
2014/04/01 职场文书
人大代表选举标语
2014/10/07 职场文书
王兆力在市委党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
优秀教师个人总结
2015/02/11 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android
MySQL修改默认引擎和字符集详情
2021/09/25 MySQL