一、函數和方法的區別
1、函數要手動傳self,方法不用傳
2、如果是一個函數,用類名去調用,如果是一個額方法,用對象去調用
舉例說明:
class Foo(object): def __init__(self): self.name="haiyan" def func(self): print(self.name) obj = Foo() obj.func() Foo.func(obj)
判斷函數和方法的方式
from types import FunctionType,MethodType obj = Foo() print(isinstance(obj.func,FunctionType)) #False print(isinstance(obj.func,MethodType)) #True #說明這是一個方法 print(isinstance(Foo.func,FunctionType)) #True #說明這是一個函數。 print(isinstance(Foo.func,MethodType)) #False
二、js和jquery綁定事件的幾種方式
三、創建表的一個limit_choices_to參數
limit_choices_to:屏蔽某些選項,只顯示某些指定的選項。例如下面的,只讓顯示部門id是1001的
consultant = models.ForeignKey(verbose_name="課程顧問", to='UserInfo', related_name='consultant',limit_choices_to={'depart_id':1001})
四、include和inclusion_tag的區別
這兩個都是處理代碼冗余的,由於其他的頁面也會有這樣的功能,也要用到,我們可以吧它摘出來,在創建個文件夾寫進去。導入進來
如果用include,這里面的數據得從后端傳,
如果用inclusion_tag,你返回啥就會幫我們傳啥,它既有自己的功能,也有include的功能,又可以處理數據
include的使用
<body> <h3>添加頁面</h3> {% include "stark/form.html" %} {#<form action="">#} {# {{ form }}#} {#</form>#}
#include導入的相當於下面注釋的form表單的內容
inclusion_tag的使用
1、創建一個templatetags的文件夾,在里面創建一個change_form.py的文件,在里面寫代碼,需要加上
@register.inclusion_tag這個裝飾器
#!usr/bin/env python # -*- coding:utf-8 -*- from django.template import Library from django.urls import reverse from app01.service.v1 import site register = Library() @register.inclusion_tag("stark/form.html") def form(model_form_obj): from django.forms import ModelChoiceField from django.forms.boundfield import BoundField # 數據都封裝在這個類了 new_form = [] for bfield in model_form_obj: dic = {"is_popup": False, "item": bfield} # 每一個bfield就是Form的字段,是一個對象 if isinstance(bfield.field, ModelChoiceField): # print(bfield.field,"popup按鈕") print(bfield, type(bfield)) # <class 'django.forms.boundfield.BoundField'> releated_model_name = bfield.field.queryset.model # 找到關聯的類名 app_model_name = releated_model_name._meta.app_label, releated_model_name._meta.model_name # 找到應用名和類名(目的是拼接url) base_url = reverse("stark:%s_%s_add" % (app_model_name)) popup_url = "%s?_popupbackid=%s" % (base_url, bfield.auto_id) #每一個input框的id print(bfield.auto_id,"111111") dic["is_popup"] = True dic["popup_url"] = popup_url new_form.append(dic) return {"form":new_form} #返回的這個form是給了"stark/form.html"它里面的form,然后循環遍歷
3、使用
{% load change_form %} <body> <h3>編輯頁面</h3> {% form form %} </body>
4、form.html
<form method="post" class="form-horizontal" novalidate> {% csrf_token %} {% for dic in form %} <div class="col-sm-6"> <div class="form-group"> <label for="inputEmail3" class="col-sm-2 control-label">{{ dic.item.label }}</label> <div class="col-sm-10" style="position: relative"> {{ dic.item }} {% if dic.is_popup %} <div style="position: absolute;right: -5px;top: 8px;z-index: 9999"> <a onclick="popUp('{{ dic.popup_url }}')" class="glyphicon glyphicon-plus"></a> <!--注意要加引號,不然就會被當成變量了--> </div> {#判斷如果是MOdelChoicesField是Fk#} {#判斷如果是MOdelChoicesField是Fk#} {% endif %} {{ dic.item.errors.0 }} </div> </div> </div> {% endfor %} <div class="col-sm-offset-11 col-sm-1"> <input type="submit" class="btn btn-primary" value="提交"> </div> </form> <script> function popupCallback(data) { var op = document.createElement("option"); op.value = data.id; op.text = data.text; op.setAttribute("selected", "selected"); document.getElementById(data.popupbackid).appendChild(op) } function popUp(url) { var popupPage = window.open(url, url, "status=1, height:500, width:600, toolbar=0, resizeable=0"); } </script>