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实现获取网站PR及百度权重
Jan 21 Python
python开发环境PyScripter中文乱码问题解决方案
Sep 11 Python
Python机器学习库scikit-learn安装与基本使用教程
Jun 25 Python
基于tensorflow加载部分层的方法
Jul 26 Python
在python中pandas读文件,有中文字符的方法
Dec 12 Python
Python学习笔记之字符串和字符串方法实例详解
Aug 22 Python
Python 实现日志同时输出到屏幕和文件
Feb 19 Python
pandas分组聚合详解
Apr 10 Python
Python unittest单元测试框架实现参数化
Apr 29 Python
使用python实现时间序列白噪声检验方式
Jun 03 Python
Python中logging日志的四个等级和使用
Nov 17 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
Mar 04 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
桌面中心(三)修改数据库
2006/10/09 PHP
PHP5多态性与动态绑定介绍
2015/04/03 PHP
php 利用array_slice函数获取随机数组或前几条数据
2015/09/30 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
PHP 数组基本操作小结(推荐)
2016/06/13 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
ExtJS Window 最小化的一种方法
2009/11/18 Javascript
非常棒的10款jQuery 幻灯片插件
2011/06/14 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
jquery 键盘事件的使用方法详解
2017/09/13 jQuery
如何通过shell脚本自动生成vue文件详解
2019/09/10 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
[02:58]献给西雅图的情书_高清
2014/05/29 DOTA
python里对list中的整数求平均并排序
2014/09/12 Python
python操作ie登陆土豆网的方法
2015/05/09 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
python3读取excel文件只提取某些行某些列的值方法
2018/07/10 Python
Python 读写文件的操作代码
2018/09/20 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
keras 如何保存最佳的训练模型
2020/05/25 Python
使用Html5、CSS实现文字阴影效果
2018/01/17 HTML / CSS
html5弹跳球示例代码
2013/07/23 HTML / CSS
Max&Co官网:意大利年轻女性时尚品牌
2017/05/16 全球购物
美国知名的隐形眼镜电商:Contacts America
2019/11/19 全球购物
自动化职业生涯规划书范文
2014/01/03 职场文书
公司同意接收函
2014/01/13 职场文书
保护校园环境倡议书
2015/04/28 职场文书
青年志愿者服务活动总结
2015/05/06 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
简历上的自我评价,该怎么写呢?
2019/06/13 职场文书
jquery插件实现图片悬浮
2021/04/16 jQuery