• 增加问题


    1. 问题: 此时问卷表新增加的问题是一个form对象 而问卷表中有问题的是多个form对象 前端需要做区分判断 不方便 

    问卷表
    
    	- 后端
    
    		- 获取当前问卷表中的所有问题
    		- 判断是否可以获取到
    			- 是 
    				- 代表问卷调查表中含有问题  有几个对象代表这个问卷表中含有几个问题
    				- 每个问题对象生成一个form对象, 如果有默认值需要传入参数instance=对象
    			- 否 
    				- 新创建一个没有默认值的form对象
    
    class QuestionModelForm(ModelForm):
    
        class Meta:
            model = models.Question
            fields = ["caption","question_types"]
    
    
    
    
    def question(request,pid):
    
        que_list = models.Question.objects.filter(questionnaire_id=pid)
        if not que_list:
            form = QuestionModelForm()
        else:
            for item in que_list:
                form = QuestionModelForm(instance=item)
    View Code

    2. 前后端初步实现显示问题列表

    问卷表
    
    	- 后端
    
    		- 获取当前问卷表中的所有问题
    		- 判断是否可以获取到
    			- 是 
    				- 代表问卷调查表中含有问题  有几个对象代表这个问卷表中含有几个问题
    				- 每个问题对象生成一个form对象, 如果有默认值需要传入参数instance=对象
    				- 定义一个[] 循环的form对象都追加到[]中
    			- 否 
    				- 新创建一个没有默认值的form对象
    				- 定义一个[] 新创建的form对象传入
    
    	- 前端
    
    		- 使用ol li 这样前端显示的问题一或其它问题删除 ,其它问题就可以顶上来
    
    from django.shortcuts import render
    from app01 import models
    from django.forms import Form,ModelForm
    
    
    def index(request):
    
        question_list = models.Questionnaire.objects.all()
    
        return render(request,"index.html",locals())
    
    
    class QuestionModelForm(ModelForm):
    
    
        class Meta:
            model = models.Question
            fields = ["caption","tp"]
    
    
    
    
    def question(request,pid):
    
        que_list = models.Question.objects.filter(questionnaire_id=pid)
        form_list = []
        if not que_list:
            form = QuestionModelForm()
            form_list.append(form)
        else:
            for item in que_list:
                form = QuestionModelForm(instance=item)
                form_list.append(form)
        return render(request,"que.html",{"form_list":form_list})
    Views.py
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <ol>
            {% for form in form_list %}
                <li>
                    <p>{{ form.caption }}</p>
                    <p>{{ form.tp }}</p>
                </li>
            {% endfor %}
        </ol>
    </body>
    </html>
    que.html
    """survey URL Configuration
    
    The `urlpatterns` list routes URLs to views. For more information please see:
        https://docs.djangoproject.com/en/1.11/topics/http/urls/
    Examples:
    Function views
        1. Add an import:  from my_app import views
        2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
    Class-based views
        1. Add an import:  from other_app.views import Home
        2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
    Including another URLconf
        1. Import the include() function: from django.conf.urls import url, include
        2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
    """
    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^index/', views.index),
        url(r'^question/(?P<pid>d+)/', views.question),
    ]
    urls.py

    3. 后端循环有生成器实现 前端为每个问题对象设置自定义属性 问题id

    问卷表
    
    	- 后端
    
    		- 获取当前问卷表中的所有问题
    		- 定义一个函数 使用yield {}传给前端
    			- 判断是否可以获取到问题对象
    				- 是 
    					- 代表问卷调查表中含有问题  有几个对象代表这个问卷表中含有几个问题
    					- 每个问题对象生成一个form对象, 如果有默认值需要传入参数instance=对象
    					- yield 返回{"form":form,"obj":问题对象}
    				- 否 
    					- 新创建一个没有默认值的form对象
    					- yield 返回{"form":form,"obj":None}
    
    	- 前端
    
    		- 使用ol li 这样前端显示的问题一或其它问题删除 ,其它问题就可以顶上来
    		- 循环取出问题对象的问题和类型 和问题的id
    
    from django.shortcuts import render
    from app01 import models
    from django.forms import Form,ModelForm
    
    
    def index(request):
    
        question_list = models.Questionnaire.objects.all()
    
        return render(request,"index.html",locals())
    
    
    class QuestionModelForm(ModelForm):
    
    
        class Meta:
            model = models.Question
            fields = ["caption","tp"]
    
    
    
    
    def question(request,pid):
    
        def inner():
            que_list = models.Question.objects.filter(questionnaire_id=pid)
    
            if not que_list:
                form = QuestionModelForm()
                yield {"form":form,"obj":None}
            else:
                for item in que_list:
                    form = QuestionModelForm(instance=item)
                    yield {"form":form,"obj":item}
    
        return render(request,"que.html",{"form_list":inner()})
    Views.py
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <ol>
            {% for item in form_list %}
                <li>
                    <div pk="{{ item.obj.id }}">
                        <p>{{ item.form.caption }}</p>
                        <p>{{ item.form.tp }}</p>
                    </div>
                </li>
            {% endfor %}
        </ol>
    </body>
    </html>
    que.html

    4. 当类型为单选 显示增加选项 否则隐藏

    问卷表
    
    	- 后端
    
    		- 获取当前问卷表中的所有问题
    		- 定义一个函数 使用yield {}传给前端
    			- 判断是否可以获取到问题对象
    				- 是 
    					- 代表问卷调查表中含有问题  有几个对象代表这个问卷表中含有几个问题
    					- 每个问题对象生成一个form对象, 如果有默认值需要传入参数instance=对象
    					- 定义{"form":form,"obj":item,"option_class":"hide","option"}
    					- 如果循环的对象的类型为单选
    						- 字典增加设置一个值为空 作用:前端增加选项的隐藏属性设置为空  
    
    					- yield 返回字典对象
    				- 否 
    					- 新创建一个没有默认值的form对象
    					- yield 返回{"form":form,"obj":item,"option_class":"hide"}
    
    	- 前端
    
    		- 使用ol li 这样前端显示的问题一或其它问题 删除 ,其它问题就可以顶上来
    		- 循环取出问题对象的问题和类型 和问题的id
    			- 为每个问题对象的div自定义属性 pk=id 为以后和后端 做删除或修改操作
    			- 为每个类型后面添加 增加选项 
    from django.shortcuts import render
    from app01 import models
    from django.forms import Form,ModelForm
    
    
    def index(request):
    
        question_list = models.Questionnaire.objects.all()
    
        return render(request,"index.html",locals())
    
    
    class QuestionModelForm(ModelForm):
    
    
        class Meta:
            model = models.Question
            fields = ["caption","tp"]
    
    
    
    
    def question(request,pid):
    
        def inner():
            que_list = models.Question.objects.filter(questionnaire_id=pid)
    
            if not que_list:
                form = QuestionModelForm()
                yield {"form":form,"obj":None,"option_class":"hide"}
            else:
                for item in que_list:
                    form = QuestionModelForm(instance=item)
                    temp = {"form":form,"obj":item,"option_class":"hide"}
                    if item.tp == 2:
                        temp["option_class"] = ''
                    yield temp
    
    
    
        return render(request,"que.html",{"form_list":inner()})
    views.py
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .hide{
                display: none;
            }
        </style>
    </head>
    <body>
        <ol>
            {% for item in form_list %}
                <li>
                    <div pk="{{ item.obj.id }}">
                        <p>{{ item.form.caption }}</p>
                        <p>{{ item.form.tp }} <a href="#" class="{{ item.option_class }}">增加选项</a></p>
                    </div>
                </li>
            {% endfor %}
        </ol>
    </body>
    </html>
    que.html

    5. 打分显示

    问卷表
    
    	- 后端
    
    		- 获取当前问卷表中的所有问题
    		- 定义一个函数 使用yield {}传给前端
    			- 判断是否可以获取到问题对象
    				- 是 
    					- 代表问卷调查表中含有问题  有几个对象代表这个问卷表中含有几个问题
    					- 每个问题对象生成一个form对象, 如果有默认值需要传入参数instance=对象
    					- 定义{"form":form,"obj":item,"option_class":"hide","option":None}
    					- 如果循环的对象的类型为单选
    						- 字典增加设置一个值为空 作用:前端增加选项的隐藏属性设置为空  
    						- 找到这个问题单选的所有选项 把每一选项的对象加入一个列表 字典的option重新赋值列表
    
    					- yield 返回字典对象
    				- 否 
    					- 新创建一个没有默认值的form对象
    					- yield 返回{"form":form,"obj":item,"option_class":"hide","option":None}
    
    	- 前端
    
    		- 使用ol li 这样前端显示的问题一或其它问题 删除 ,其它问题就可以顶上来
    		- 循环取出问题对象的问题和类型 和问题的id
    			- 为每个问题对象的div自定义属性 pk=id 为以后和后端 做删除或修改操作
    			- 为每个类型后面添加 增加选项
    			- 循环打分 
    
    from django.shortcuts import render
    from app01 import models
    from django.forms import Form,ModelForm
    
    
    def index(request):
    
        question_list = models.Questionnaire.objects.all()
    
        return render(request,"index.html",locals())
    
    
    class QuestionModelForm(ModelForm):
    
    
        class Meta:
            model = models.Question
            fields = ["caption","tp"]
    
    class OptionModelForm(ModelForm):
    
        class Meta:
            model = models.Option
            fields = ["name","score"]
    
    
    
    def question(request,pid):
    
        def inner():
            que_list = models.Question.objects.filter(questionnaire_id=pid)
    
            if not que_list:
                form = QuestionModelForm()
                yield {"form":form,"obj":None,"option_class":"hide","option":None}
            else:
                for item in que_list:
                    form = QuestionModelForm(instance=item)
                    temp = {"form":form,"obj":item,"option_class":"hide","option":None}
                    if item.tp == 2:
                        temp["option_class"] = ''
                        option_model_list = []
                        option_list = models.Option.objects.filter(qs=item)
                        for v in option_list:
                            obj = OptionModelForm(instance=v)
                            option_model_list.append(obj)
                        temp["option"] = option_model_list
                    yield temp
    
    
    
        return render(request,"que.html",{"form_list":inner()})
    views.py
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .hide{
                display: none;
            }
        </style>
    </head>
    <body>
        <ol>
            {% for item in form_list %}
                <li>
                    <div pk="{{ item.obj.id }}">
                        <p>{{ item.form.caption }}</p>
                        <p>{{ item.form.tp }} <a href="#" class="{{ item.option_class }}">增加选项</a></p>
                        <ul>
                            {% for v in item.option %}
                            <div>
                                <li>
                                    <p>{{ v.name }} {{ v.score }}</p>
                                </li>
    
                            </div>
                            {% endfor %}
                        </ul>
                    </div>
                </li>
    
            {% endfor %}
        </ol>
    </body>
    </html>
    que.html
    from django.shortcuts import render
    from app01 import models
    from django.forms import Form,ModelForm
    
    
    def index(request):
    
        question_list = models.Questionnaire.objects.all()
    
        return render(request,"index.html",locals())
    
    
    class QuestionModelForm(ModelForm):
    
    
        class Meta:
            model = models.Question
            fields = ["caption","tp"]
    
    class OptionModelForm(ModelForm):
    
        class Meta:
            model = models.Option
            fields = ["name","score"]
    
    
    
    def question(request,pid):
    
        def inner():
            que_list = models.Question.objects.filter(questionnaire_id=pid)
    
            if not que_list:
                form = QuestionModelForm()
                yield {"form":form,"obj":None,"option_class":"hide","option":None}
            else:
                for item in que_list:
                    form = QuestionModelForm(instance=item)
                    temp = {"form":form,"obj":item,"option_class":"hide","option":None}
                    if item.tp == 2:
                        temp["option_class"] = ''
                        def inner_loop(item):
                            option_list = models.Option.objects.filter(qs=item)
                            for v in option_list:
                                yield OptionModelForm(instance=v)
    
                        temp["option"] = inner_loop(item)
                    yield temp
    
    
    
        return render(request,"que.html",{"form_list":inner()})
    views.py 生成器

    6. 打分显示id

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .hide{
                display: none;
            }
        </style>
    </head>
    <body>
        <ol>
            {% for item in form_list %}
                <li>
                    <div pk="{{ item.obj.id }}">
                        <p>{{ item.form.caption }}</p>
                        <p>{{ item.form.tp }} <a href="#" class="{{ item.option_class }}">增加选项</a></p>
                        <ul>
                            {% for v in item.option %}
                            <div id="{{ v.obj.id }}">
                                <li>
                                    <p>{{ v.form.name }} {{ v.form.score }}</p>
                                </li>
    
                            </div>
                            {% endfor %}
                        </ul>
                    </div>
                </li>
    
            {% endfor %}
        </ol>
    </body>
    </html>
    que.html
    from django.shortcuts import render
    from app01 import models
    from django.forms import Form,ModelForm
    
    
    def index(request):
    
        question_list = models.Questionnaire.objects.all()
    
        return render(request,"index.html",locals())
    
    
    class QuestionModelForm(ModelForm):
    
    
        class Meta:
            model = models.Question
            fields = ["caption","tp"]
    
    class OptionModelForm(ModelForm):
    
        class Meta:
            model = models.Option
            fields = ["name","score"]
    
    
    
    def question(request,pid):
    
        def inner():
            que_list = models.Question.objects.filter(questionnaire_id=pid)
    
            if not que_list:
                form = QuestionModelForm()
                yield {"form":form,"obj":None,"option_class":"hide","option":None}
            else:
                for item in que_list:
                    form = QuestionModelForm(instance=item)
                    temp = {"form":form,"obj":item,"option_class":"hide","option":None}
                    if item.tp == 2:
                        temp["option_class"] = ''
    
                        def inner_loop(item):
                            option_list = models.Option.objects.filter(qs=item)
                            for v in option_list:
                                yield {"form":OptionModelForm(instance=v),"obj":v}
    
                        temp["option"] = inner_loop(item)
                    yield temp
    
    
    
        return render(request,"que.html",{"form_list":inner()})
    Views.py

      

      

      

      

  • 相关阅读:
    jQuery easyUI 的combogrid进行模糊匹配
    SQL 快速生成不重复的卡号
    用SQL语句查找包含有某个关键字的存储过程、触发器、函数等等
    C# DateTime日期格式化
    【SQL触发器】类型 FOR 、AFTER、 Instead of
    【BAT】批量给制定类型的文件名添加前缀
    【VBA】将Excel数据转化为txt文本数据
    【Python】将多个工作簿中的数据按列合并到同一个工作表
    【Python】从DB2数据库中取出字段信息并根据字段类型生成SQL
    【Oracle】多行数据合并为一行,使用逗号分隔
  • 原文地址:https://www.cnblogs.com/golangav/p/8007040.html
Copyright © 2020-2023  润新知