继昨天留下的问题
思路:
结果:
优化:
from stark.service.site import site,ModelSatrk from .models import * from django.utils.safestring import mark_safe from django.urls import reverse # class BookConfig(ModelSatrk): def edit(self,obj=None,is_header=False): if is_header: return "操作" edit_url=reverse("%s_%s_change"%self.app_model_name,args=(obj.pk,)) return mark_safe("<a href='%s'>编辑</a>"%edit_url) # return 的url需要反向解析,需要取到name的值 def delete(self,obj=None,is_header=False): if is_header: return "操作" # 如何反向解析url delete_url = reverse("%s_%s_change" % self.app_model_name, args=(obj.pk,)) return mark_safe("<a href='%s'>删除</a>"%delete_url) list_display = ["id","title","price",edit,delete] # z这个list_display只针对Book表 # 自制注册功能(admin表的注册 site.register(Book,BookConfig)
在site模板提前取值
from django.conf.urls import url from django.shortcuts import HttpResponse,render class ModelSatrk(object): # 针对某张表的样式 list_display=[] # 提供给用户自己定制显示字段 def __init__(self,model,site): # http://127.0.0.1:8000/stark/app01/book/ self.model=model # 获取是当前哪张表对应的样式类对象(用户访问当前类 self.site=site # 拿到一个全局的单例对象 self.app_model_name=(self.model._meta.app_label,self.model._meta.model_name)
------------------------
这样第一种情况结束(用户自定义样式类)
第二中:当用户没有定义样式类(我们需要提供一个默认样式类)
会以__str__来当默认值
admin是以这样的形式展示默认样式的:
header_list.append(self.model._meta.model_name.upper())
所以,接下来添加复选框
----
当默认样式一定要有["id","title","price",] 这3个字段,怎么操作
这3部分不需要用户去定制
定义一个新的空列表
def get_list_display(self): new_list_display=[] # [checkbox,"__str__",edit,delete] 将list_display里的str添加过去 new_list_display.extend(self.list_display) # self.list_display是一个列表,将一个列表添加进一个列表 new_list_display.append(ModelSatrk.edit) new_list_display.append(ModelSatrk.delete) new_list_display.insert(0,ModelSatrk.checkbox) # insert,第一个放位置 return new_list_display # [checkbox,"__str__",edit,delete]
展示数据信息和表头信息都用这个