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 17 Python
Python base64编码解码实例
Jun 21 Python
Python实现把数字转换成中文
Jun 29 Python
python过滤字符串中不属于指定集合中字符的类实例
Jun 30 Python
python实现发送和获取手机短信验证码
Jan 15 Python
Python3.遍历某文件夹提取特定文件名的实例
Apr 26 Python
python按照多个条件排序的方法
Feb 08 Python
Python字符串的常见操作实例小结
Apr 08 Python
pytorch制作自己的LMDB数据操作示例
Dec 18 Python
tensorflow-gpu安装的常见问题及解决方案
Jan 20 Python
python实现电子词典
Mar 03 Python
yolov5返回坐标的方法实例
Mar 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
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
PHP+MySQL 制作简单的留言本
2009/11/02 PHP
php cli换行示例
2014/04/22 PHP
joomla数据库操作示例代码
2016/01/06 PHP
PHP简单实现合并2个数字键数组值的方法
2017/05/30 PHP
php中yar框架实例用法讲解
2020/12/27 PHP
javascript jQuery插件练习
2008/12/24 Javascript
jQuery 学习第五课 Ajax 使用说明
2010/05/17 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
2015/08/28 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
基于jquery实现左右按钮点击的图片切换效果
2021/01/27 Javascript
jQuery基础知识点总结(必看)
2016/05/31 Javascript
浅谈Nodejs应用主文件index.js
2016/08/28 NodeJs
Bootstrap源码解读排版(1)
2016/12/23 Javascript
利用Javascript实现简单的转盘抽奖
2017/02/13 Javascript
Vue中fragment.js使用方法详解
2017/03/09 Javascript
Vuex和前端缓存的整合策略详解
2017/05/09 Javascript
AngularJS基于MVC的复杂操作实例讲解
2017/12/31 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
[02:34]2016完美“圣”典风云人物:BurNIng专访
2016/12/10 DOTA
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
python中返回矩阵的行列方法
2018/04/04 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
DJI全球:DJI Global
2021/03/15 全球购物
工业学校毕业生自荐信范文
2014/01/03 职场文书
公司拓展活动方案
2014/02/13 职场文书
计算机专业职业规划
2014/02/28 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python
element tree树形组件回显数据问题解决
2022/08/14 Javascript