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开发之文件操作用法实例
Nov 13 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
Sep 26 Python
python+mongodb数据抓取详细介绍
Oct 25 Python
Python中is和==的区别详解
Nov 15 Python
python爬虫之验证码篇3-滑动验证码识别技术
Apr 11 Python
使用Python3内置文档高效学习以及官方中文文档
May 19 Python
Python从函数参数类型引出元组实例分析
May 28 Python
利用selenium爬虫抓取数据的基础教程
Jun 10 Python
python绘制动态曲线教程
Feb 24 Python
python with语句的原理与用法详解
Mar 30 Python
带你学习Python如何实现回归树模型
Jul 16 Python
python爬虫基础之urllib的使用
Dec 31 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 xml文件操作代码(一)
2009/03/20 PHP
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
微信支付开发维权通知实例
2016/07/12 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
javascript 操作select下拉列表框的一点小经验
2010/03/20 Javascript
php 中序列化和json使用介绍
2013/07/08 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
JS实现简单的图书馆享元模式实例
2015/06/30 Javascript
VUEJS实战之利用laypage插件实现分页(3)
2016/06/13 Javascript
javaScript实现滚动条事件详解
2020/03/24 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
[00:19]CN DOTA NEVER DIE!VG夺冠rOtK接受采访
2019/12/23 DOTA
Python 内置函数complex详解
2016/10/23 Python
Python线程同步的实现代码
2018/10/03 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
2020/03/06 Python
Django静态资源部署404问题解决方案
2020/05/11 Python
Python如何使用input函数获取输入
2020/08/06 Python
详解CSS3实现响应式手风琴效果
2020/06/10 HTML / CSS
英国马匹装备和马术用品购物网站:Equine Superstore
2019/03/03 全球购物
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
意大利包包和行李箱销售网站:Bagaglio.it
2021/03/02 全球购物
C#可否对内存进行直接的操作
2015/02/26 面试题
Java基础面试题
2012/11/02 面试题
结婚典礼证婚词
2014/01/11 职场文书
腾讯广告词
2014/03/19 职场文书
2014年五一劳动节社区活动总结
2014/04/14 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
2014年财务工作总结范文
2014/11/11 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
婚庆答谢词大全
2015/09/29 职场文书
使用Spring处理x-www-form-urlencoded方式
2021/11/02 Java/Android
vue代码分块和懒加载非必要资源文件
2022/04/11 Vue.js