1.分页器
分页器相关知识点,请查看以下链接
https://www.cnblogs.com/gbq-dog/p/10724859.html
2.代码归类
归类前代码
header_list = [] # 定制一个空别表 for field_or_func in self.get_new_list_display(): # 如果是多对多的 if callable(field_or_func): val = field_or_func(self, header=True) header_list.append(val) # header_list.append(field_or_func.__name__) # 如果是普通属性 else: if field_or_func == "__str__": val = self.model._meta.model_name.upper() else: field_obj = self.model._meta.get_field(field_or_func) val = field_obj.verbose_name # 自定义属性名 header_list.append(val) # 构建展示数据 new_data = [] for obj in queryset: temp = [] for field_or_func in self.get_new_list_display(): if callable(field_or_func): val = field_or_func(self, obj) # 获取函数返回值,传入obj进行从操作数据 elif not field_or_func == "__str__": from django.db.models.fields.related import ManyToManyField field_obj = self.model._meta.get_field(field_or_func) # 获取模型对象 # 判断是否为多对多属性 if type(field_obj) == ManyToManyField: raise Exception("list_display不能是多对多字段!") # 判断是否有选择属性 if field_obj.choices: val = getattr(obj, "get_%s_display" % field_or_func)() # 调用这个方法,反射方法,调用方法获取对应的内容 else: val = getattr(obj, field_or_func) if field_or_func in self.list_display_links: val = mark_safe("<a href='%s'>%s</a>" % (self.get_change_url(obj), val)) else: val = getattr(obj, field_or_func)() temp.append(val) # print(">>>>>>>>>>>>",temp) new_data.append(temp)