编辑功能。和添加一样! 唯一不同的就是, 需要编辑一个指定的  记录。
这就需要,在列表页面, 渲染编辑的时候,添加一个 id 值:

class UserInfoHandler(StartHandler):
# 自定制,展示页面, 需要展示的东西。 根据每张表的不同。 自己编写!
list_display = [StartHandler.display_checkbox, "name", "age", "depart", get_choice_txt("班级", "classes"),
get_choice_txt("性别", "gender"), StartHandler.display_edit, StartHandler.display_del]

上面基类中,在 list_dispaly 类表中, 添加了!  StartHandler.display_edit,  StartHandler.display_del  这是两个在, 基类中。 定义好的删除和编辑的,按钮。 列表视图。再循环这个列表时, 如果有这两个函数,那么就会执行他,这个函数通过 memory_url 解析出url来。 并返回。  视图中就接受到这个 URL 添加到。 列表中,交给。 模板进行渲染。

class StartHandler(object):
list_display = [] ......................# 用于在 a 标签。 携带本次GET 请求参数
def memory_url(self, get_url_name, *args, **kwargs):
'''用于反向生成url, 并且携带,get请求的参数,跳转到下一个网页'''
name = "%s:%s" % (self.site.namespace, get_url_name)
base_url = reverse(name, args=args, kwargs=kwargs)
# 记录原搜索条件
if not self.request.GET:
url = base_url
else:
param = self.request.GET.urlencode() # 获取到GET请求的,所有的参数。 ?page=1&age=20
new_query_dict = QueryDict(mutable=True)
new_query_dict["_filter"] = param
url = "%s?%s" % (base_url, new_query_dict.urlencode())
return url # 用于 跳转会原页面时,解析出 GET 请求的参数。并拼接
def memory_reverse(self, get_url_name, *args, **kwargs):
name = "%s:%s" % (self.site.namespace, get_url_name) # get_url_name是,类内部封装好的函数的来
url = reverse(name, args=args, kwargs=kwargs)
origin_params = self.request.GET.get("_filter")
if origin_params:
url = "%s?%s" % (url, origin_params)
return url
# 用于用户自定制, 是否显示编辑按钮, 和显示的样式
def display_edit(self, obj=None, is_header=None):
'''
自定义页面,显示的列,(表头和内容)
:param obj: 数据库中每一行记录的 model对象
:param is_header: 判断是否为表头
:return:
'''
if is_header:
return "编辑表头"
# name = "%s:%s" % (self.site.namespace, self.get_edit_url_name) # 拼接 stark:app01_userinfo_change
return mark_safe("<a href='%s'>编辑</a>" %
self.memory_url(get_url_name=self.get_edit_url_name, pk=obj.pk)) # 用于用户自定制, 是否显示删除按钮
def display_del(self, obj=None, is_header=None):
if is_header:
return "删除表头"
# name = "%s:%s" % (self.site.namespace, self.get_del_url_name)
return mark_safe("<a href='%s'>删除</a>" %
self.memory_url(get_url_name=self.get_del_url_name, pk=obj.pk)) per_page = 10 # 默认每页显示,多少数据。 也可在子类中,自行定制
def check_list_view(self, request, *args, **kwargs):
................
# ##################5. 处理表格######################
data_list = query_set[pager.start:pager.end] # 对得到的内容。 进行切片获取,并展示到页面上 body_list = []
for row in data_list:
row_list = []
if list_display:
for key_or_func in list_display:
if isinstance(key_or_func, FunctionType):
# 这里is_header=False obj=row(数据库中循环的每一行的对象)
row_list.append(key_or_func(self, obj=row, is_header=False))
else:
row_list.append(getattr(row, key_or_func))
else:
row_list.append(row)
body_list.append(row_list)

      .....................
return render(request, "stark/changelist.html",
{"header_list": header_list, "data_list": data_list,
"body_list": body_list,
"pager": pager,
"add_btn": add_btn,
"search_list": search_list,
"search_value": search_value,
"action_dict": action_dict})
  
   @property
    def get_list_url_name(self):
        '''获取列表页面URL 的name'''
        return self.get_url_name("list")     @property
    def get_add_url_name(self):
        '''获取添加页面URL 的name'''
        return self.get_url_name("add")     @property
    def get_edit_url_name(self):
        '''获取修改页面URL 的name'''
        return self.get_url_name("change")  # app01_userinfo_change     @property
    def get_del_url_name(self):
        '''获取删除页面URL 的name'''
        return self.get_url_name("del")

编辑的视图函数, 根据pk  拿到数据库中!相对应的数据:

并传给 form类。  使用instance  制定这个就可以了!

POST 过来的时候, 连带着,前端过来的数据, 和 当前更改对象。 一样 使用 instance 传给 form 就行了!

    def change_view(self, request, pk):
'''
编辑页面
:param request:
:return:
'''
current_change_obj = self.model_class.objects.filter(pk=pk).first()
if not current_change_obj:
return HttpResponse("要修改的页面不存在,请重新选择") model_form_class = self.get_model_form_class()
if request.method == "GET":
form = model_form_class(instance=current_change_obj)
return render(request, "stark/change.html", {"form": form})if request.method == "POST":
       form = model_form_class(data=request.POST, instance=current_change_obj)
if form.is_valid():
self.save(form, is_update=False)
return redirect(self.memory_reverse(self.get_list_url_name))
return render(request, "stark/change.html", {"form": form})
return HttpResponse("编辑页面")

stark组件开发之编辑功能实现的更多相关文章

  1. stark组件开发之添加功能实现

    添加功能,还是使用, form 组件来完成!  并且 完成添加之后,需要保留原搜索条件. def memory_url(self): '''用于反向生成url, 并且携带,get请求的参数,跳转到下一 ...

  2. stark组件开发之列表页面定制列

    先看一张页面展示的效果图: 看一看我的  model 表!是什么样子: 看一看数据库是什么样子: 看 页面展示图,有表头. 有数据.模型表中,每一个字段, 都指定了 verbose_name. 如何解 ...

  3. stark组件开发之列表页面应用示例

    已经解决的,自定义的扩展函数,功能.但是 不可能返回. 一个 固定的页面把!  应该是,点击那条 记录之后的编辑, 就会跳转到相应的,编辑页面.所以 这个标签的  <a href="/ ...

  4. stark组件开发之组合搜索实现思路

    - 关键字搜索. 可以做到的效果是, 输入20. 后太通过 Q()  函数. 来实现.  搜索是一个大的问题点. -  要想实现组合搜索, 首先要 明确的一点是. 在我当前的页面上, 正在进行展示的是 ...

  5. stark组件开发之批量操作

    class UserInfoHandler(StartHandler): ....... # 批量操作功能的列表,添加则显示, 使用此功能.需要将StartHandler.display_checkb ...

  6. stark组件开发之分页

    """ 分页组件 """ class Pagination(object): def __init__(self, current_page ...

  7. stark组件开发之组合搜索页面效果和 URL

    页面效果,只是样式.这个好解决!yield 的时候. 返回几个样式出去就好了! 并且前端写上一些样式的css {% if search_group_row_list %} <div class= ...

  8. stark组件开发之关键搜索

    - 模糊搜索: 在页面生成一个表单.  以get 方式, 将数据提交到.当前查看页面. 后台接收数据,然后进行筛选过滤. 着个也需要,用户自定制!   定义一个  search_list  这个值,默 ...

  9. stark组件开发之排序

    class StartHandler(object): .......... ordered_list = [] # 排序规则由 用户指定. def get_ordered_list(self): r ...

随机推荐

  1. 邮件报警以及服务端能否ping通客户端的小例子(三)

           就这个小小的东西,弄了一天,弄的头晕眼花,毕竟第一次弄这个,记录下来,若干年之后,回看这些笔记,不知是什么样的感想,哈哈.我学一个东西的时候喜欢系统的来,一点一点的来,做这个的时候想法很 ...

  2. 阅读 Device Driver Programmer Guide 笔记

    阅读 Device Driver Programmer Guide 笔记 xilinx驱动命名规则 以X开头 源文件命名规则 以x打头 底层头文件与高级头文件 重点来了,关于指针的使用 其中 XDev ...

  3. Windows Azure Virtual Network (13) 跨数据中心之间的虚拟网络点对点连接VNet Peering

    <Windows Azure Platform 系列文章目录> 今天是大年初二,首先祝大家新年快乐,万事如意. 在笔者之前的文章中:Windows Azure Virtual Networ ...

  4. 随机森林RandomForest

    ID3,C4.5决策树的生成: 输入:训练集D,特征集A,阈值eps, 输出:决策树T 若D中所有样本属于同一类Ck,则T为单节点树,将类Ck作为该结点的类标记,返回T: 若A为空集,即没有特征作为划 ...

  5. JAVA 异常类型结构分析

    JAVA 异常类型结构分析 Throwable 是所有异常类型的基类,Throwable 下一层分为两个分支,Error 和 Exception. Error 和 Exception Error Er ...

  6. Ubuntu16.04下修改MySQL数据的默认存储位置

    由于在Linux下MySQL默认是存储在/var/lib/mysql目录下,mysql的数据会非常大,由于/var所划分的空间不够大,所以我们需要将mysql数据存放路径修改一下,放到大分区里面,以便 ...

  7. 195. Spring Boot 2.0数据库迁移:Flyway

    [视频&交流平台] àSpringBoot视频:http://t.cn/R3QepWG à SpringCloud视频:http://t.cn/R3QeRZc à Spring Boot源码: ...

  8. python变量、注释、程序交互、格式化输入、基本运算符

    变量                                                                                                  ...

  9. 英文文档帮查&翻译计划

    以CSDN为首,知乎其次,cnblog带路的一大批博客上充斥着大量低质量的编程入门教程,代码粗制滥造,毫无缩进,没有高亮,东抄西抄.初学者如果长期参照这种垃圾博客来解决问题,将会适得其反,走入歧途. ...

  10. Android Room 学习(一)

    Room简介 Room persistence库为SQLite提供了一个抽象层,以便在利用SQLite的全部功能的同时实现更强大的数据库访问. 该库可帮助您在运行应用程序的设备上创建应用程序数据的缓存 ...