def detail_resplonse(sender, **kargs): from dbapp.templatetags import dbapp_tags from mysite.personnel.models.model_emp import Employee from dbapp.widgets import form_field, check_limit if kargs['dataModel']==LeaveLog: form=sender['form'] #print form.fields if "mysite.att" in settings.INSTALLED_APPS: closeatt=models.BooleanField(verbose_name=_(u'立即关闭考勤'),default=True) form.fields['opcloseatt']=form_field(closeatt) if "mysite.iaccess" in settings.INSTALLED_APPS: closeacc=models.BooleanField(verbose_name=_(u'立即关闭门禁'),default=True) form.fields['opcloseacc']=form_field(closeacc) field = models.BooleanField(_(u'是否黑名单'), choices=YESORNO, default=0) form.fields['isblacklist']=form_field(field)
def params2form(params): from django.forms import forms from dbapp import widgets from dbapp.widgets import form_field form = forms.Form() for e in params: field = e[1] form.fields[e[0]] = form_field(field) return form
def detail_resplonse(sender, **kargs): from dbapp.templatetags import dbapp_tags from mysite.personnel.models.model_emp import Employee from dbapp.widgets import form_field, check_limit if kargs['dataModel'] == LeaveLog: form = sender['form'] #print form.fields if "mysite.att" in settings.INSTALLED_APPS: closeatt = models.BooleanField(verbose_name=_(u'立即关闭考勤'), default=True) form.fields['opcloseatt'] = form_field(closeatt) if "mysite.iaccess" in settings.INSTALLED_APPS: closeacc = models.BooleanField(verbose_name=_(u'立即关闭门禁'), default=True) form.fields['opcloseacc'] = form_field(closeacc) field = models.BooleanField(_(u'是否黑名单'), choices=YESORNO, default=0) form.fields['isblacklist'] = form_field(field)
def detail_resplonse(sender, **kargs): from dbapp.templatetags import dbapp_tags from mysite.personnel.models.model_emp import Employee from dbapp.widgets import form_field, check_limit if kargs['dataModel']==LeaveLog: form=sender['form'] #print form.fields field = models.BooleanField(_(u'是否黑名单'), choices=YESORNO, default=0) form.fields['isblacklist']=form_field(field) if get_option("ATT"): closeatt=models.BooleanField(verbose_name=_(u'立即关闭考勤'),default=True) form.fields['opcloseatt']=form_field(closeatt) if get_option("IACCESS"): closeacc=models.BooleanField(verbose_name=_(u'立即关闭门禁'),default=True) form.fields['opcloseacc']=form_field(closeacc) if get_option("POS"): closepos=models.BooleanField(verbose_name=_(u'立即关闭消费'),default=True) form.fields['opclosepos']=form_field(closepos)
def area_treeview(): from mysite.personnel.models.model_area import AreaForeignKey from dbapp.widgets import form_field fwidget = ZDeptChoiceFlatWidget( attrs={ "async_model": "personnel__Area", "async_url": "/personnel/get_children_nodes/", "checkable": False, "click": "reflash_child_area_list" }) field = form_field(AreaForeignKey(), widget=fwidget) return field.widget.render("", "")
def GetFormField(key, ModelField, **kwargs): ''' 由模型字段构造表单字段,供前端灵活使用 key 表单字段名称 ModelField 定义的模型字段 如: EmpPoPMultForeignKey 返回可直接供前端使用的表单字段 如: 选人控件 ''' from django import forms from dbapp.widgets import form_field form = forms.Form() m_formfield = form_field(ModelField, **kwargs) form.fields[key] = m_formfield return form[key]
def __init__(self, request, data=None, dataKey=None): # 引入一些模型 model_dept = sys.modules['mysite.personnel.models.model_dept'] Department = getattr(model_dept, 'Department') DeptManyToManyField = getattr(model_dept, 'DeptManyToManyField') model_deptadmin = sys.modules[ 'mysite.personnel.models.model_deptadmin'] model_areaadmin = sys.modules[ 'mysite.personnel.models.model_areaadmin'] DeptAdmin = getattr(model_deptadmin, 'DeptAdmin') AreaAdmin = getattr(model_areaadmin, 'AreaAdmin') model_area = sys.modules['mysite.personnel.models.model_area'] Area = getattr(model_area, 'Area') AreaManyToManyField = getattr(model_area, 'AreaManyToManyField') depttree = sys.modules['mysite.personnel.models.depttree'] ZDeptMultiChoiceDropDownWidget = getattr( depttree, 'ZDeptMultiChoiceDropDownWidget') self.request = request try: instance = User.objects.get(pk=dataKey) isAdd = False except: instance = None isAdd = True self.instance = instance opts = User._meta self.opts = opts exclude = ('user_permissions', 'password', 'is_active') if isAdd: exclude = exclude + ('last_login', 'date_joined') elif request.user.pk == instance.pk: exclude = exclude + ('is_staff', 'is_superuser', 'groups') field_list = [] for f in opts.fields + opts.many_to_many: if not f.editable: continue if exclude and (f.name in exclude): continue if not isAdd: current_value = f.value_from_object(instance) formfield = f.formfield(initial=current_value) else: formfield = f.formfield() if formfield: field_list.append((f.name, formfield)) if f.name in ('last_login', 'date_joined'): formfield.widget.attrs['readonly'] = True if f.name in ('groups', ): try: formfield.help_text = "" formfield.widget = widgets.DivCheckboxSelectMultiple( choices=formfield.choices) except: import traceback traceback.print_exc() field_list.insert( 1, ('is_resetPw', forms.BooleanField( label=_(u'重置密码'), initial=False, required=False))) formfield = forms.CharField(widget=forms.PasswordInput, label=_(u'密码'), initial=(isAdd and "" or "111111")) field_list.insert(2, ('Password', formfield)) formfield = forms.CharField(widget=forms.PasswordInput, label=_(u'确认密码'), initial=(isAdd and "" or "111111")) field_list.insert(3, ('ResetPassword', formfield)) fpid = OperatorTemplate.objects.filter( user=instance, fpversion="9") #查询当前用户有多少枚指纹及指纹ID号 fpidcount = fpid.count() fpids = '' for i in range(fpidcount): if not fpids: fpids = str(fpid[i].finger_id) else: fpids = fpids + "," + str(fpid[i].finger_id) formfield = forms.CharField(label=_(u'用户指纹id'), widget=forms.TextInput, max_length=50, required=False, initial=fpids) field_list.insert(4, ('fpidnum', formfield)) formfield = forms.CharField(label=_(u'用户指纹数'), widget=forms.TextInput, max_length=50, required=False, initial=fpidcount) field_list.insert(5, ('fpcount', formfield)) from base.models import options from mysite import settings lng = options['base.language'] formfield = forms.CharField(label=_(u'语言'), widget=forms.TextInput, max_length=50, required=False, initial=lng) field_list.insert(6, ('tlng', formfield)) self.depts = None self.deptadmins = None if not isAdd: try: self.deptadmins = DeptAdmin.objects.filter(user=instance) ids = self.deptadmins.values_list("dept") self.depts = Department.objects.filter(pk__in=ids) except: pass c = 4 try: AuthedDept = DeptManyToManyField(Department, verbose_name=_(u'授权部门')) formfield = widgets.form_field( AuthedDept, initial=self.depts, required=False, widget=ZDeptMultiChoiceDropDownWidget, help_text=_(u"不选部门将默认拥有所有部门权限")) field_list.insert(c, ('AuthedDept', formfield)) except: import traceback traceback.print_exc() c = 4 + 1 self.areas = None self.areaadmins = None if not isAdd: try: self.areaadmins = AreaAdmin.objects.filter(user=instance) ares_ids = self.areaadmins.values_list("area") self.areas = Area.objects.filter(pk__in=ares_ids) except: pass try: AuthedArea = AreaManyToManyField(Area, verbose_name=_(u'授权区域')) formfield = widgets.form_field( AuthedArea, initial=self.areas, required=False, widget=ZDeptMultiChoiceDropDownWidget, help_text=_(u"不选区域将默认拥有所有区域权限")) field_list.insert(c, ('AuthedArea', formfield)) except: import traceback traceback.print_exc() self.base_fields = SortedDict(field_list) forms.Form.__init__(self, data)
def detail_resplonse(sender, **kargs): from dbapp.widgets import form_field, check_limit from mysite.iclock.models import Template from mysite import settings import os if kargs['dataModel'] == Employee: form = sender['form'] isexits = False tcount = 0 tfingerid = "" fptypecode = "" #durtcount = 0 #durfpid = "" tcount10 = 0 tfingerid10 = "" pin = "" lng = 'chs' if kargs['key'] != None: pin = Employee.objects.get(pk=kargs['key']).PIN t9 = Template.objects.filter(UserID__exact=kargs['key'], Fpversion='9')#9.0指纹模版 t10 = Template.objects.filter(UserID__exact=kargs['key'], Fpversion='10')#9.0指纹模版 if len(t10)>0 and len(t10)>=len(t9): #tcount = len(t) tfingerid = ",".join(["%s" % i.FingerID for i in t10]) else: tfingerid = ",".join(["%s" % i.FingerID for i in t9]) t9 = Template.objects.filter(UserID__exact=kargs['key'], Fpversion='9') #指纹数量 t10 = Template.objects.filter(UserID__exact=kargs['key'], Fpversion='10') #指纹数量 if len(t10)>0 and len(t10)>=len(t9): tcount = len(t10) fptypecode = ",".join(["%s" % i.Valid for i in t10]) # 指纹类型代码 else: tcount = len(t9) fptypecode = ",".join(["%s" % i.Valid for i in t9]) # 指纹类型代码 #t = Template.objects.filter(UserID__exact=kargs['key'], Fpversion='9', Valid=DURESS_FINGER) #胁迫指纹数量 #if len(t) > 0: # durtcount = len(t) # durfpid = ",".join(["%s" % i.FingerID for i in t]) t = Template.objects.filter(UserID__exact=kargs['key'], Fpversion='10')#10.0指纹模板 if len(t) > 0: tcount10 = len(t) tfingerid10 = ",".join(["%s" % i.FingerID for i in t]) photopath = settings.ADDITION_FILE_ROOT + "photo/" + pin + ".jpg" if os.path.isfile(photopath): isexits = True from base.models import options from mysite import settings lng = options['base.language'] #print "lng:%s" % lng chkph = models.BooleanField(verbose_name=_(u'判断个人照片存在'), default=isexits, blank=True, null=True) tfcount = models.CharField(verbose_name=_(u'指纹模版数量'), max_length=10, default=tcount, blank=True, null=True) fpcode = models.CharField(verbose_name=_(u'手指类型'), max_length=20, default=fptypecode, blank=True, null=True) #durtfcount = models.CharField(verbose_name=_(u'胁迫指纹模版数量'), max_length=10, default=durtcount, blank=True, null=True) #durfingerid = models.CharField(verbose_name=_(u'胁迫指纹id'), max_length=10, default=durfpid, blank=True, null=True) tfids = models.CharField(verbose_name=_(u'手指编号'), max_length=20, default=tfingerid, blank=True, null=True) tlng = models.CharField(verbose_name=_(u'当前语言'), max_length=10, default=lng, blank=True, null=True) tfcount10 = models.CharField(verbose_name=_(u'模版数量'), max_length=10, default=tcount10, blank=True, null=True) tfids10 = models.CharField(verbose_name=_(u'手指编号'), max_length=20, default=tfingerid10, blank=True, null=True) pin_width = models.IntegerField(null=True, blank=True, default=settings.PIN_WIDTH) #安装语言 # kargs["install_language"]=settings.APP_CONFIG.language.language install_language = models.CharField(verbose_name=_(u'安装语言'), max_length=20, default=settings.APP_CONFIG.language.language, blank=True, null=True) form.fields['install_language'] = form_field(install_language) form.fields['chkph'] = form_field(chkph) form.fields['tcount'] = form_field(tfcount) form.fields['tfids'] = form_field(tfids) form.fields['fpcode'] = form_field(fpcode) #form.fields['durtcount'] = form_field(durtfcount) #form.fields['durfpid'] = form_field(durfingerid) form.fields['lng'] = form_field(tlng) form.fields['tcount10'] = form_field(tfcount10) form.fields['tfids10'] = form_field(tfids10) form.fields['pin_width'] = form_field(pin_width)
def detail_resplonse(sender, **kargs): from mysite.personnel.models.depttree import ZDeptMultiChoiceWidget from dbapp.templatetags import dbapp_tags from dbapp.widgets import form_field, check_limit if kargs['dataModel']==EmpChange: #print "sender:%s"%sender #print "kargs:%s"%kargs form=sender['form'] ec=None if kargs['key']!=None: ec=EmpChange.objects.get(pk=kargs['key']) #print form.fields available=models.BooleanField(verbose_name=_(u'立即生效')) chkdept=models.BooleanField(verbose_name=_(u'部门')) chkhiretype=models.BooleanField(verbose_name=_(u'雇用类型')) chktitle=models.BooleanField(verbose_name=_(u'职务')) chkarea=models.BooleanField(verbose_name=_(u'区域')) title=Employee._meta.get_field('Title') area=AreaManyToManyField(Area,blank=True,null=True) dept=Employee._meta.get_field('DeptID') hiretype=models.CharField(verbose_name=_(u'雇用类型'),choices=EMPTYPE,blank=True,null=True) form.fields['available']=form_field(available) form.fields['oldtitle']=form_field(title) if ec and ec.changepostion==4: if ec.oldvalue: objs=Area.objects.filter(pk__in=ec.oldvalue.split(",")) else: objs=[] form.fields['oldarea']=form_field(area,initial=objs) else: form.fields['oldarea']=form_field(area) if ec and ec.changepostion==1: obj=None if ec.oldvalue: obj=Department.objects.get(pk=ec.oldvalue) form.fields['olddept']=form_field(dept,initial=obj) else: form.fields['olddept']=form_field(dept) form.fields['oldhiretype']=form_field(hiretype) form.fields['newtitle']=form_field(title) if ec and ec.changepostion==4: if ec.newvalue: objs=Area.objects.filter(pk__in=ec.newvalue.split(",")) else: objs=[] form.fields['newarea']=form_field(area,initial=objs) else: form.fields['newarea']=form_field(area) if ec and ec.changepostion==1: obj=None if ec.newvalue: obj=Department.objects.get(pk=ec.newvalue) form.fields['newdept']=form_field(dept,initial=obj) else: form.fields['newdept']=form_field(dept) form.fields['newhiretype']=form_field(hiretype) form.fields['chkdept']=form_field(chkdept) form.fields['chkhiretype']=form_field(chkhiretype) form.fields['chktitle']=form_field(chktitle) form.fields['chkarea']=form_field(chkarea)
def __init__(self, request, data=None, dataKey=None): # 引入一些模型 model_dept = sys.modules['mysite.personnel.models.model_dept'] Department = getattr(model_dept,'Department') DeptManyToManyField = getattr(model_dept,'DeptManyToManyField') model_deptadmin = sys.modules['mysite.personnel.models.model_deptadmin'] model_areaadmin = sys.modules['mysite.personnel.models.model_areaadmin'] DeptAdmin = getattr(model_deptadmin,'DeptAdmin') AreaAdmin = getattr(model_areaadmin,'AreaAdmin') model_area = sys.modules['mysite.personnel.models.model_area'] Area = getattr(model_area,'Area') AreaManyToManyField = getattr(model_area,'AreaManyToManyField') depttree = sys.modules['mysite.personnel.models.depttree'] ZDeptMultiChoiceDropDownWidget = getattr(depttree,'ZDeptMultiChoiceDropDownWidget') self.request=request try: instance=User.objects.get(pk=dataKey) isAdd=False except: instance=None isAdd=True self.instance=instance opts=User._meta self.opts=opts exclude=('user_permissions','password','is_active') if isAdd: exclude=exclude+('last_login','date_joined') elif request.user.pk==instance.pk: exclude=exclude+('is_staff','is_superuser', 'groups') field_list = [] for f in opts.fields + opts.many_to_many: if not f.editable: continue if exclude and (f.name in exclude): continue if not isAdd: current_value = f.value_from_object(instance) formfield=f.formfield(initial=current_value) else: formfield=f.formfield() if formfield: field_list.append((f.name, formfield)) if f.name in ('last_login','date_joined'): formfield.widget.attrs['readonly']=True if f.name in ('groups',): try: formfield.help_text="" formfield.widget=widgets.DivCheckboxSelectMultiple(choices=formfield.choices) except: import traceback; traceback.print_exc() field_list.insert(1,('is_resetPw',forms.BooleanField(label=_(u'重置密码'), initial=False, required=False))) formfield=forms.CharField(widget=forms.PasswordInput, label=_(u'密码'), initial=(isAdd and "" or "111111")) field_list.insert(2,('Password',formfield)) formfield=forms.CharField(widget=forms.PasswordInput, label=_(u'确认密码'), initial=(isAdd and "" or "111111")) field_list.insert(3,('ResetPassword',formfield)) fpid = OperatorTemplate.objects.filter(user=instance, fpversion="9") #查询当前用户有多少枚指纹及指纹ID号 fpidcount = fpid.count() fpids = '' for i in range(fpidcount): if not fpids: fpids = str(fpid[i].finger_id) else: fpids = fpids + "," + str(fpid[i].finger_id) formfield = forms.CharField( label=_(u'用户指纹id'), widget=forms.TextInput, max_length=50, required=False, initial=fpids) field_list.insert( 4,('fpidnum', formfield )) formfield = forms.CharField( label=_(u'用户指纹数'), widget=forms.TextInput, max_length=50, required=False, initial=fpidcount) field_list.insert( 5,('fpcount', formfield )) from base.models import options from mysite import settings lng = options['base.language'] formfield = forms.CharField( label=_(u'语言'), widget=forms.TextInput, max_length=50, required=False, initial=lng) field_list.insert( 6,('tlng', formfield )) self.depts=None self.deptadmins =None if not isAdd: try: self.deptadmins=DeptAdmin.objects.filter(user=instance) ids =self.deptadmins.values_list("dept") self.depts = Department.objects.filter(pk__in=ids) except: pass c=4 try: AuthedDept = DeptManyToManyField(Department,verbose_name=_(u'授权部门')) formfield =widgets.form_field(AuthedDept,initial=self.depts,required=False,widget=ZDeptMultiChoiceDropDownWidget,help_text=_(u"不选部门将默认拥有所有部门权限")) field_list.insert(c,('AuthedDept',formfield)) except: import traceback; traceback.print_exc() c=4+1 self.areas =None self.areaadmins =None if not isAdd: try: self.areaadmins=AreaAdmin.objects.filter(user=instance) ares_ids =self.areaadmins.values_list("area") self.areas = Area.objects.filter(pk__in=ares_ids) except: pass try: AuthedArea = AreaManyToManyField(Area,verbose_name=_(u'授权区域')) formfield =widgets.form_field(AuthedArea,initial=self.areas,required=False,widget=ZDeptMultiChoiceDropDownWidget,help_text=_(u"不选区域将默认拥有所有区域权限")) field_list.insert(c,('AuthedArea',formfield)) except: import traceback; traceback.print_exc() self.base_fields = SortedDict(field_list) forms.Form.__init__(self, data)
def get_model_attributes(mc,recursive_level=1): #正向查找本模型字段,以及外键,多对多字段类型 from dbapp import widgets field_types={ models.CharField : "CharField", models.AutoField : "AutoField", models.BigIntegerField : "BigIntegerField", models.BooleanField : "BooleanField", models.DateField : "DateField", models.DateTimeField : "DateTimeField", models.DecimalField : "DecimalField", models.EmailField : "EmailField", models.FilePathField : "FilePathField", models.FloatField : "FloatField", models.ForeignKey : "ForeignKey", models.ManyToManyField :"ManyToManyField", models.IntegerField : "IntegerField", models.IPAddressField : "IPAddressField", #models.PhoneNumberField : "PhoneNumberField", models.SmallIntegerField : "SmallIntegerField", models.TextField : "TextField", models.TimeField : "TimeField", } dict={} dict.update({ "app_label":mc._meta.app_label, "m_name":mc.__name__, "m_verbose_name":u"%s"%mc._meta.verbose_name, }); #字段 fields={} #判断模型是否配置了报表字段(不同的系统模型字段可能不一样,例如Employee模型中门禁字段就不能在考勤系统中出现) if not hasattr(mc.Admin,"report_fields"): return {} for f_name in mc.Admin.report_fields: try: e=mc._meta.get_field(f_name) except: continue field_type=[v for k,v in field_types.items() if isinstance(e,k)]#是否在规定的字段中 if field_type: field_name=e.name fields[field_name]={ "f_name":field_name, "f_verbose_name":u"%s"%e.verbose_name, "field_type":field_type[0], } #下拉列表属性 choices=[] try: for k,v in e.choices: choices.append([k,u"%s"%v]) except:pass fields[field_name]["choices"]=choices #默认值 default_value="" try: default_value=e.get_default() or "" except:pass fields[field_name]["default"]=default_value #长度 max_length=0 try: max_length=e.max_length except:pass fields[field_name]["max_length"]=max_length #widget html widget=None default_widgets={} if hasattr(mc.Admin, "default_widgets"): default_widgets=mc.Admin.default_widgets if callable(default_widgets): default_widgets(mc) if field_name in default_widgets: widget=default_widgets[field_name] elif e.__class__ in default_widgets: widget=default_widgets[e.__class__] if widget: formfield = widgets.form_field(e, initial="", widget=widget) else: formfield = widgets.form_field(e, initial="") if isinstance(e,models.ForeignKey): fields[field_name]["widget"]="" else: fields[field_name]["widget"]=formfield.widget.render(field_name,"",{}) # if widget: # fields[field_name]["widget"]=widget.render("","") # else: # fields[field_name]["widget"]=e.formfield().widget.render("","") if isinstance(e,models.ForeignKey): if e.rel.to!=mc:#自连接表 fields[field_name]["rel_field_name"]=e.rel.field_name if recursive_level!=0: recursive_level=recursive_level-1 fields[field_name].update(get_model_attributes(e.rel.to,recursive_level)) else:#自连接字段暂时删除 del fields[field_name] dict["fields"]=fields return dict