filter 条件
user.objects.filter( a = 0 , b = 1 )
filter( a = ' 0 ' , b = ' 1 ' )
filter(**{ a:0 , b : 1 } )
filter(**{ a : ' 0 ' , b : ' 1 ' } )
以上四种结果一样
导入模块方法:
cls = importlib.import_module(app_name)
mod=getattr(cls,"kingadmin")
mod = __import__('%s.kingadmin' % app_name)
from django.shortcuts import render,redirect from django.contrib.auth import authenticate,login,logout from django.contrib.auth.decorators import login_required from django import conf from kingadmin import app_setup from crm import models app_setup.kingadmin_auto_discover() from kingadmin.sites import site print("sites.",site.enabled_admins) # for k,v in site.enabled_admins.items(): # for table_name,admin_class in v.items(): # print(table_name,id(admin_class)) # # Create your views here. def app_index(request): #enabled_admins = return render(request,'kingadmin/app_index.html', {'site':site}) def get_filter_result(request,querysets): filter_conditions = {} for key,val in request.GET.items(): if val: filter_conditions[key] = val print("filter_conditions",filter_conditions) print('我') print("123456",querysets.filter(**{'consultant': 1, 'status': 0})) print("789456",querysets.filter(consultant="1",status='0')) return querysets.filter(**filter_conditions),filter_conditions # @login_required def table_obj_list(request,app_name,model_name): """取出指定model里的数据返回给前端""" #print("app_name,model_name:",site.enabled_admins[app_name][model_name]) admin_class = site.enabled_admins[app_name][model_name] querysets = admin_class.model.objects.all() querysets,filter_condtions = get_filter_result(request,querysets) admin_class.filter_condtions = filter_condtions print(request.GET) #print("admin class",admin_class.model ) return render(request,'kingadmin/table_obj_list.html', {'querysets':querysets,'admin_class':admin_class}) def acc_login(request): error_msg = '' if request.method == "POST": username = request.POST.get('username') password = request.POST.get('password') user = authenticate(username=username,password=password) if user: print("passed authencation",user) login(request,user) #request.user = user return redirect( request.GET.get('next','/kingadmin/') ) else: error_msg = "Wrong username or password!" return render(request, 'kingadmin/login.html', {'error_msg':error_msg}) def acc_logout(request): logout(request) return redirect("/login/")
from django.template import Library from django.utils.safestring import mark_safe import datetime ,time register = Library() @register.simple_tag def build_filter_ele(filter_column,admin_class): column_obj = admin_class.model._meta.get_field(filter_column) print("column obj:",column_obj) try: filter_ele = "<select name='%s'>" % filter_column for choice in column_obj.get_choices(): selected = '' if filter_column in admin_class.filter_condtions:#当前字段被过滤了 # print("filter_column", choice, # type(admin_class.filter_condtions.get(filter_column)), # admin_class.filter_condtions.get(filter_column)) if str(choice[0]) == admin_class.filter_condtions.get(filter_column):#当前值被选中了 selected = 'selected' print('selected......') option = "<option value='%s' %s>%s</option>" % (choice[0],selected,choice[1]) filter_ele += option except AttributeError as e: print("err",e) filter_ele = "<select name='%s__gte'>" % filter_column if column_obj.get_internal_type() in ('DateField','DateTimeField'): time_obj = datetime.datetime.now() time_list = [ ['','------'], [time_obj,'Today'], [time_obj - datetime.timedelta(7),'七天内'], [time_obj.replace(day=1),'本月'], [time_obj - datetime.timedelta(90),'三个月内'], [time_obj.replace(month=1,day=1),'YearToDay(YTD)'], ['','ALL'], ] for i in time_list: selected = '' time_to_str = ''if not i[0] else "%s-%s-%s"%(i[0].year,i[0].month,i[0].day) if "%s__gte"% filter_column in admin_class.filter_condtions: # 当前字段被过滤了 print('-------------gte') if time_to_str == admin_class.filter_condtions.get("%s__gte"% filter_column): # 当前值被选中了 selected = 'selected' option = "<option value='%s' %s>%s</option>" % \ (time_to_str ,selected,i[1]) filter_ele += option filter_ele += "</select>" return mark_safe(filter_ele) @register.simple_tag def build_table_row(obj,admin_class): """生成一条记录的html element""" ele = "" for column_name in admin_class.list_display: column_obj = admin_class.model._meta.get_field(column_name) if column_obj.choices: #get_xxx_display column_data = getattr(obj,'get_%s_display'% column_name)() else: column_data = getattr(obj,column_name) td_ele = "<td>%s</td>"% column_data ele += td_ele return mark_safe(ele)
from django import conf def kingadmin_auto_discover(): for app_name in conf.settings.INSTALLED_APPS: # mod = importlib.import_module(app_name, 'kingadmin') try: mod = __import__('%s.kingadmin' % app_name) #print(mod.kingadmin) except ImportError : pass