예제 #1
0
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)
예제 #2
0
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
예제 #3
0
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)
예제 #4
0
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)
예제 #5
0
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("", "")
예제 #6
0
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]
예제 #7
0
    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)
예제 #8
0
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)
예제 #9
0
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)
예제 #10
0
        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)
예제 #11
0
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