stack组件03

继昨天留下的问题

思路:

结果:

优化:

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)
stark.py

在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)
View Code

------------------------

这样第一种情况结束(用户自定义样式类)
 
第二中:当用户没有定义样式类(我们需要提供一个默认样式类)
会以__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]

展示数据信息和表头信息都用这个

原文地址:https://www.cnblogs.com/jassin-du/p/8570008.html