5-crm專案-kingadmin,列表頁---過濾
阿新 • • 發佈:2020-08-10
展示客戶列表頁面--------過濾
# kingadmin/templatetags/kingadmin_tags.py import datetime from django.template import Library from django.utils.safestring import mark_safe register = Library() @register.simple_tag def build_filter_ele(filter_column,admin_class): filter_ele = "<select name='%s'>"%filter_column column_obj = admin_class.model._meta.get_field(filter_column) try: for choice in column_obj.get_choices(): option = "<option value='%s'>%s</option>"%choice filter_ele += option except AttributeError as e: #get_internal_type():獲取欄位屬性 #因為時間的過濾方式是固定的(今天,過去七天,一個月.....),而不是從後臺獲取的 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: option = "<option value='%s'>%s</option>" %(i[0],i[1]) filter_ele += option filter_ele += "</select>" return mark_safe(filter_ele)
對應的html
<div>
<form>
{% for filter_column in admin_class.list_filter %} ----->這是把自定義的所有的過濾欄位進行迴圈讀取
{% build_filter_ele filter_column admin_class %}
{% endfor %}
<input type="submit" value="過濾">
</form>
</div>
對應的views
def get_filter_result(request,querysets):
filter_conditions = {}
#獲取過濾的欄位
for key,val in request.GET.items():
if val:
filter_conditions[key] = val
#返回過濾後的資料
return querysets.filter(**filter_conditions),filter_conditions
@login_required
def table_obj_list(request, app_name, model_name):
'''取出指定model裡的資料返回給前端'''
#拿到admin_class後,通過它找到拿到model
admin_class = site.enable_admins[app_name][model_name]
querysets = admin_class.model.objects.all()
querysets,filter_conditions = get_filter_result(request,querysets)
admin_class.filter_conditions = filter_conditions
return render(request, 'kingadmin/table_obj_list.html',{'querysets':querysets,'admin_class':admin_class})