一、函数和方法的区别
1、函数要手动传self,方法不用传
2、如果是一个函数,用类名去调用,如果是一个额方法,用对象去调用
举例说明:
1 class Foo(object): 2 def __init__(self): 3 self.name="haiyan" 4 def func(self): 5 print(self.name) 6 7 obj = Foo() 8 obj.func() 9 Foo.func(obj)
判断函数和方法的方式
1 from types import FunctionType,MethodType 2 obj = Foo() 3 print(isinstance(obj.func,FunctionType)) #False 4 print(isinstance(obj.func,MethodType)) #True #说明这是一个方法 5 6 print(isinstance(Foo.func,FunctionType)) #True #说明这是一个函数。 7 print(isinstance(Foo.func,MethodType)) #False
二、js和jquery绑定事件的几种方式
三、创建表的一个limit_choices_to参数
limit_choices_to:屏蔽某些选项,只显示某些指定的选项。例如下面的,只让显示部门id是1001的
1 consultant = models.ForeignKey(verbose_name="课程顾问", to='UserInfo', related_name='consultant',limit_choices_to={'depart_id':1001})
四、include和inclusion_tag的区别
这两个都是处理代码冗余的,由于其他的页面也会有这样的功能,也要用到,我们可以吧它摘出来,在创建个文件夹写进去。导入进来
1 如果用include,这里面的数据得从后端传, 2 如果用inclusion_tag,你返回啥就会帮我们传啥,它既有自己的功能,也有include的功能,又可以处理数据
include的使用
1 <body> 2 <h3>添加页面</h3> 3 {% include "stark/form.html" %} 4 {#<form action="">#} 5 {# {{ form }}#} 6 {#</form>#} 7 8 9 #include导入的相当于下面注释的form表单的内容
inclusion_tag的使用
1、创建一个templatetags的文件夹,在里面创建一个change_form.py的文件,在里面写代码,需要加上
@register.inclusion_tag这个装饰器
1 #!usr/bin/env python 2 # -*- coding:utf-8 -*- 3 from django.template import Library 4 from django.urls import reverse 5 from stark.service.v1 import site 6 7 register = Library() 8 @register.inclusion_tag("stark/form.html") 9 def form(model_form_obj): 10 from django.forms import ModelChoiceField 11 from django.forms.boundfield import BoundField # 数据都封装在这个类了 12 new_form = [] 13 for bfield in model_form_obj: 14 dic = {"is_popup": False, "item": bfield} # 每一个bfield就是Form的字段,是一个对象 15 if isinstance(bfield.field, ModelChoiceField): 16 # print(bfield.field,"popup按钮") 17 print(bfield, type(bfield)) # <class 'django.forms.boundfield.BoundField'> 18 releated_model_name = bfield.field.queryset.model # 找到关联的类名 19 app_model_name = releated_model_name._meta.app_label, releated_model_name._meta.model_name # 找到应用名和类名(目的是拼接url) 20 base_url = reverse("stark:%s_%s_add" % (app_model_name)) 21 popup_url = "%s?_popupbackid=%s" % (base_url, bfield.auto_id) #每一个input框的id 22 print(bfield.auto_id,"111111") 23 dic["is_popup"] = True 24 dic["popup_url"] = popup_url 25 new_form.append(dic) 26 return {"form":new_form} #返回的这个form是给了"stark/form.html"它里面的form,然后循环遍历
3、使用
1 {% load change_form %} 2 <body> 3 <h3>编辑页面</h3> 4 {% form form %} 5 </body>
4、stark/form.html
1 <form method="post" class="form-horizontal" novalidate> 2 {% csrf_token %} 3 {% for dic in form %} 4 <div class="col-sm-6"> 5 <div class="form-group"> 6 <label for="inputEmail3" class="col-sm-2 control-label">{{ dic.item.label }}</label> 7 <div class="col-sm-10" style="position: relative"> 8 {{ dic.item }} 9 {% if dic.is_popup %} 10 <div style="position: absolute;right: -5px;top: 8px;z-index: 9999"> 11 <a onclick="popUp('{{ dic.popup_url }}')" class="glyphicon glyphicon-plus"></a> <!--注意要加引号,不然就会被当成变量了--> 12 13 </div> 14 {# 判断如果是MOdelChoicesField是Fk#} 15 {# 判断如果是MOdelChoicesField是Fk#} 16 {% endif %} 17 {{ dic.item.errors.0 }} 18 </div> 19 </div> 20 </div> 21 {% endfor %} 22 <div class="col-sm-offset-11 col-sm-1"> 23 <input type="submit" class="btn btn-primary" value="提交"> 24 </div> 25 </form> 26 <script> 27 function popupCallback(data) { 28 var op = document.createElement("option"); 29 op.value = data.id; 30 op.text = data.text; 31 op.setAttribute("selected","selected"); 32 document.getElementById(data.popupbackid).appendChild(op) 33 } 34 function popUp(url) { 35 var popupPage = window.open(url, url, "status=1, height:500, 600, toolbar=0, resizeable=0"); 36 } 37 38 </script>
归类 : Django