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中的输入和输出功能进行读取和写入的教程
Apr 14 Python
Python正则获取、过滤或者替换HTML标签的方法
Jan 28 Python
python+selenium识别验证码并登录的示例代码
Dec 21 Python
Python装饰器限制函数运行时间超时则退出执行
Apr 09 Python
用python做游戏的细节详解
Jun 25 Python
Python列表的切片实例讲解
Aug 20 Python
如何基于python实现不邻接植花
May 01 Python
Opencv求取连通区域重心实例
Jun 04 Python
Python JSON常用编解码方法代码实例
Sep 05 Python
Appium+Python实现简单的自动化登录测试的实现
Jan 26 Python
自动在Windows中运行Python脚本并定时触发功能实现
Sep 04 Python
详解NumPy中的线性关系与数据修剪压缩
May 25 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 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
Yii2实现ajax上传图片插件用法
2016/04/28 PHP
PHP反射学习入门示例
2019/06/14 PHP
Laravel 登录后清空COOKIE的操作方法
2019/10/14 PHP
js ondocumentready onmouseover onclick onmouseout 样式
2010/07/22 Javascript
javascript 事件处理示例分享
2014/12/31 Javascript
js如何打印object对象
2015/10/16 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
2016/08/02 Javascript
深入理解jquery中的each用法
2016/12/14 Javascript
js使用highlight.js高亮你的代码
2017/08/18 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
听歌识曲--用python实现一个音乐检索器的功能
2016/11/15 Python
Python编程实现双击更新所有已安装python模块的方法
2017/06/05 Python
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
Python文本处理之按行处理大文件的方法
2018/04/09 Python
Python3.4学习笔记之列表、数组操作示例
2019/03/01 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
python中xlrd模块的使用详解
2021/02/01 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
使用css3做0.5px的细线的示例代码
2018/01/18 HTML / CSS
高山背包:High Sierra
2017/11/23 全球购物
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
如何唤起类中的一个方法
2013/11/29 面试题
高中军训感言500字
2014/02/24 职场文书
感恩节活动策划方案
2014/05/16 职场文书
护士工作失误检讨书
2014/09/14 职场文书
业绩倒数第一的检讨书
2014/09/24 职场文书
领导班子作风建设剖析材料
2014/10/11 职场文书
音乐教师个人总结
2015/02/06 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书
领导离职感言
2015/08/03 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
Java多条件判断场景中规则执行器的设计
2021/06/26 Java/Android