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自定义信号实例解析
Jan 31 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
Apr 26 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
Apr 27 Python
解决Python pandas df 写入excel 出现的问题
Jul 04 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
Nov 01 Python
Python使用itchat 功能分析微信好友性别和位置
Aug 05 Python
python之列表推导式的用法
Nov 29 Python
python爬取王者荣耀全皮肤的简单实现代码
Jan 31 Python
Python多重继承之菱形继承的实例详解
Feb 12 Python
keras .h5转移动端的.tflite文件实现方式
May 25 Python
Python函数参数分类原理详解
May 28 Python
哪些是python中web开发框架
Jun 17 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应用程序的七个习惯深入分析
2013/06/08 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
javascript 鼠标滚轮事件
2009/04/09 Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
2013/03/29 Javascript
js实现的常用的左侧导航效果
2013/10/17 Javascript
DOM 事件流详解
2015/01/20 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
原生js实现数字字母混合验证码的简单实例
2015/12/10 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
JS在if中的强制类型转换方式
2018/07/15 Javascript
详解从Vue-router到html5的pushState
2018/07/21 Javascript
vue移动端微信授权登录插件封装的实例
2018/08/28 Javascript
javascript中如何判断类型汇总
2019/05/14 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
[01:03:36]Ti4 循环赛第三日DK vs Titan
2014/07/12 DOTA
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
Python环境搭建之OpenCV的步骤方法
2017/10/20 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
python如何实现不用装饰器实现登陆器小程序
2019/12/14 Python
Python3标准库之functools管理函数的工具详解
2020/02/27 Python
Python 操作 MySQL数据库
2020/09/18 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
2020/09/26 Python
CSS3轻松实现清新 Loading 效果的简单实例
2016/06/06 HTML / CSS
html5实现canvas阴影效果示例
2014/05/07 HTML / CSS
DJI全球:DJI Global
2021/03/15 全球购物
.NET笔试题(20个问题)
2016/02/02 面试题
电子专业推荐信范文
2013/11/18 职场文书
《大江保卫战》教学反思
2014/04/11 职场文书
119消防日活动总结
2014/08/29 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
先进个人主要事迹怎么写
2015/11/04 职场文书
微信小程序和php的登录实现
2021/04/01 PHP
python小型的音频操作库mp3Play
2022/04/24 Python