标签:区别 data href html getattr item get list 列表
实例方法和函数的区别
class Person(object): def __init__(self,name) self.name=name def speak(self):
print(self)
# 实例方法 la=Person("la") la.eat() # 为什么不需要传参数,这是因为self把调用他的对象当成了参数
结果是:
la
# 函数调用则必须穿参数,否则会报错
Person.speak(123) # 此时self就等同于123
结果是:
123
而在list_display当中,视图是直接调用的,因此需要传参数
在注册时定义:
class ArtileConfig(Xadmin.ModelXadmin): def add_0(self,obj=None,header=False): if header: return "操作" else: url=reverse(self.model._meta.model_name+"_add") return mark_safe("<a href=‘%s‘>添加</a>"%url) list_display=[checkbox,"title","up_count","down_count",add_0]
在另外一个py文件中调用,因此需要自己传参数
在Xadmin中调用:
def test(self, request, *args): data_list=self.model.objects.all() # 返回的是queryset列表 items_list=[] title_list=[] for field in self.list_display: if isinstance(field, str): title_list.append(self.model._meta.get_field(field).verbose_name) # 求字段名 else: # if callable(field) 判断是不是函数 # 函数怎么命名 title_list.append(field(self,header=True)) for obj in data_list: item=[] for field in self.list_display: #["title","desc",add_0] if isinstance(field,str): # 求字段名 item.append(getattr(obj,field)) # 当是多对多的关系时,这个也可以的 else: item.append(field(self,obj)) items_list.append(item) return render(request, "XXadmin/XXadmin_check.html",{"items_list":items_list,"title_list":title_list})
url分发缺陷,用表名当做反向解析,会出现重复,在不同的app中,可能会有同名的表
@property def url(self): # self指调用他的对象,也就是site调用 table_name = self.model._meta.model_name app_name = self.model._meta.app_label url = [] url.append(re_path(‘^add/$‘,self.test,name=table_name+"_add")) url.append(re_path(‘^delete/(\d+)‘,self.test,name=table_name+"_delete")) url.append(re_path(‘^update/(\d+)‘,self.test,name=table_name+"_update")) url.append(re_path(‘^check/(\d+)‘,self.test,name=table_name+"_check")) url.append(re_path(‘^$‘,self.test,name=table_name+"_home")) return url,None,None # [re_path(‘^delete/(\d+)‘,test),],None,None
因此可以加上app的名字,相当于加上了namespace,这样重复的概率就会很低
如何展示不同的表, 把数据放在
标签:区别 data href html getattr item get list 列表
原文地址:https://www.cnblogs.com/AbnerLc/p/11186604.html