这个技巧,主要是用于表单初始化及回显。

也就是说,如果用户的数据库里有数据,则要将相应的数据显示在表单里,

如果用户的数据库里没有数据,才会生成一个空白的表单给用户,

这样才显得专业塞!

而我面对的尴尬问题是:

表单数据不是对应的数据库里的一条记录,而是符合条件的多条记录。

而且,数据库的过滤条件,是通过url里定义的值,而不是固定的参数过滤。

那么,肿么办?

查文档呗~~~~!

当看完相关文档,知道是先调用get方法,再调用get_initial方法来初始化表单时,

处理问题的方案,就浮现出来了。

通过类变量作传递嘛~~~

具体操作如下:

一,在formview里定义两个类变量(因为url里对应的是两个变量)。

class AppResEditView(FormView):
    template_name = 'app/app_res_edit.html'
    context_object_name = 'app_res'
    form_class = AppResForm
    app = None
    env = None

二,在get里填充这两个变量。

    def get(self, request, *args, **kwargs):
        # 先在get方法里拿到app和env,放到类变量里,
        # 然后,在将变量传递到get_initial方法里,初始化表单数据。
        # 这样实现是因为方法调用上有先后关系,且数据库里不是对应一条记录。
        self.app = App.objects.get(name=kwargs['app'])
        self.env = Env.objects.get(name=kwargs['env'])
        return super().get(self, request, *args, **kwargs)

三,在get_initial方法里,拿出这两个变量,用来进行数据库过滤。

    def get_initial(self, *args, **kwargs):
        """
        Returns the initial data to use for forms on this view.
        """
        # 初始化表单数据
        initial = super().get_initial()
        res_list = AppEnvConfig.objects.filter(app=self.app, env=self.env)
        for item in res_list:
            initial[item.key] = item.value
        return initial

django的FormView中,自定义初始化表单数据的曲折方法的更多相关文章

  1. Struts2中Action取得表单数据的几种方法

    Struts2中Action取得表单数据的几种方法   Struts2中Action获得表单数据的几种方法struts2 Action获取表单传值 1.通过属性驱动式JSP: <form act ...

  2. 在Adobe Reader中保存PDF表单数据的方法

    通常,Adobe Reader 用户填写表单后,是无法保存所填表单的副本的.但是,对于 Reader 8 和更高版本的用户,您可以扩展其权限,使他们可以完成此操作.如果您使用的是 Acrobat Pr ...

  3. session_start()导致history.go(-1)返回时无法保存表单数据的解决方法

    问题背景: 在填写完表单提交时,由于某个表单项可能填写的不合法,导致提交失败,返回表单页面.但返回后所有的表单都被清空了,重新填写比较麻烦,度娘解释说,是由于每个页面都调用了session_start ...

  4. jQuery中设置form表单中action值的方法

    jQuery中设置form表单中action值的方法 (2011-03-17 10:18:19) 转载▼ 标签: 杂谈   html代码: <form id="myFormId&quo ...

  5. Django认证系统之自定义认证表

    models.py from django.db import models from django.contrib.auth.models import AbstractUser class Use ...

  6. 表单数据校检方法 onsubmit()的使用?

    在项目中为一个表单(from)编写onsubmit()脚本的时候,经常需要验证表单中数据的合法性 所以常会写道:<form action="/admin/addUser.do" ...

  7. jquery表单数据验证扩展方法

    /** 表单数据验证 **/ $.fn.Validform = function () { var Validatemsg = ""; var Validateflag = tru ...

  8. Django 在admin中自定义app名

    前提条件,注册时是: 完整的注册,不是直接用app名进行注册 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'dj ...

  9. php中用于接受表单数据的$_request与$_post、$_get

    一.$_request与$_post.$_get的区别和特点 $_REQUEST[]具用$_POST[] $_GET[]的功能,但是$_REQUEST[]比较慢.通过post和get方法提交的所有数据 ...

随机推荐

  1. IDEA中设置注释模板的方法

    IDEA中设置注释模板主要分为两个部分,分别是创建java文件时类的注释和方法的注释. 这里为大家详细介绍一下方法,按MyEclipse的风格设置(MyEclipse的请看:MyEclipse中设置注 ...

  2. vue常用UI组件

    Mint UI 项目主页:http://mint-ui.github.io/#!/zh-cn demo:http://elemefe.github.io/mint-ui/#/ github地址:htt ...

  3. Socket 连接建立过程

    阻塞模式下: 1,客户端向服务器端发起请求建立连接时,服务器端只需要运行到 serverSocket = ); 客户端注册的  SelectionKey.OP_CONNECT 事件就能够发生. 也就是 ...

  4. Java入门系列(十二)Java反射

    Why--指的是为什么做这件事,也既事物的本质. 反射之中包含了一个“反”的概念,所以要想解释反射就必须先从“正”开始解释,一般而言,当用户使用一个类的时候,应该先知道这个类,而后通过这个类产生实例化 ...

  5. 10 SpringBoot全面接管SpringMVC

    Spring Boot官方文档描述 If you want to keep Spring Boot MVC features and you want to add additional MVC co ...

  6. Linux - sort 排序

    -t # 指定排序时所用的栏位分隔字符 -n # 依照数值的大小排序 -r # 以相反的顺序来排序 -f # 排序时,将小写字母视为大写字母 -d # 排序时,处理英文字母.数字及空格字符外,忽略其他 ...

  7. [C++]指针与引用(应用辨析)

    1.指针变量允许将一个整数经强制转换后赋值给指针变量    Eg:      float *fp;      fp = (float *)5000;//意义:将5000作为一个地址赋给指针变量fp 2 ...

  8. 未能加载文件或程序集System.Web.Http.WebHost

    解决方案:只需要在项目的bin文件夹下放入下面三个dll. 将:C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies中的  ...

  9. SpringMVC——SpringMVC 的入门案例

    1.建立web 项目,导入SpringMVC 相关支持jar 包 commons-logging-1.2.jar下载地址:https://commons.apache.org/proper/commo ...

  10. Generative Adversarial Nets(原生GAN学习)

    学习总结于国立台湾大学 :李宏毅老师 Author: Ian Goodfellow • Paper: https://arxiv.org/abs/1701.00160 • Video: https:/ ...