stark组件开发之编辑功能实现
编辑功能。和添加一样! 唯一不同的就是, 需要编辑一个指定的 记录。
这就需要,在列表页面, 渲染编辑的时候,添加一个 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组件开发之编辑功能实现的更多相关文章
- stark组件开发之添加功能实现
添加功能,还是使用, form 组件来完成! 并且 完成添加之后,需要保留原搜索条件. def memory_url(self): '''用于反向生成url, 并且携带,get请求的参数,跳转到下一 ...
- stark组件开发之列表页面定制列
先看一张页面展示的效果图: 看一看我的 model 表!是什么样子: 看一看数据库是什么样子: 看 页面展示图,有表头. 有数据.模型表中,每一个字段, 都指定了 verbose_name. 如何解 ...
- stark组件开发之列表页面应用示例
已经解决的,自定义的扩展函数,功能.但是 不可能返回. 一个 固定的页面把! 应该是,点击那条 记录之后的编辑, 就会跳转到相应的,编辑页面.所以 这个标签的 <a href="/ ...
- stark组件开发之组合搜索实现思路
- 关键字搜索. 可以做到的效果是, 输入20. 后太通过 Q() 函数. 来实现. 搜索是一个大的问题点. - 要想实现组合搜索, 首先要 明确的一点是. 在我当前的页面上, 正在进行展示的是 ...
- stark组件开发之批量操作
class UserInfoHandler(StartHandler): ....... # 批量操作功能的列表,添加则显示, 使用此功能.需要将StartHandler.display_checkb ...
- stark组件开发之分页
""" 分页组件 """ class Pagination(object): def __init__(self, current_page ...
- stark组件开发之组合搜索页面效果和 URL
页面效果,只是样式.这个好解决!yield 的时候. 返回几个样式出去就好了! 并且前端写上一些样式的css {% if search_group_row_list %} <div class= ...
- stark组件开发之关键搜索
- 模糊搜索: 在页面生成一个表单. 以get 方式, 将数据提交到.当前查看页面. 后台接收数据,然后进行筛选过滤. 着个也需要,用户自定制! 定义一个 search_list 这个值,默 ...
- stark组件开发之排序
class StartHandler(object): .......... ordered_list = [] # 排序规则由 用户指定. def get_ordered_list(self): r ...
随机推荐
- kafka-producer partitioner.class的使用
partitioner.class的说明 在API客户端中封装好的partition( )方法会为消息选择一个分区编号.为了保证消息负载均衡到每个分区,可以通过使用默认方式或者 手动配置这个参数的 ...
- django 生产环境部署建议
参考django官方建议 一种优秀的作法是使用前缀/ws/来区分WebSocket连接和普通HTTP连接,以便修改配置后,使Channels更容易部署到生产环境中. 特别是对于大型站点,可以配置像ng ...
- bzoj5102: [POI2018]Prawnicy
Description 定义一个区间(l,r)的长度为r-l,空区间的长度为0. 给定数轴上n个区间,请选择其中恰好k个区间,使得交集的长度最大. Input 第一行包含两个正整数n,k(1<= ...
- (转载)o(1), o(n), o(logn), o(nlogn) 时间复杂度
o(1), o(n), o(logn), o(nlogn) 时间复杂度的解释: https://blog.csdn.net/yhc166188/article/details/81162865 时间复 ...
- Office_PPT_让你一分钟完成上百张图片的快速保存
1 方式 修改PPT文件格式,由PPT修改为rar,再进行解压操作 进入到ppt->media中找到你在PPT为文件中使用的图片. 2 PPT北京图片下载网址 别样网:https://www.s ...
- 第26课 可变参数模板(7)_any和variant类的实现
1. any类的实现 (1)any类: ①是一个特殊的,只能容纳一个元素的容器,它可以擦除类型,可以将何任类型的值赋值给它. ②使用时,需要根据实际类型将any对象转换为实际的对象. (2)实现any ...
- ubuntu18.04 安装mysql server
mysql 5.7支持的最高版本是Ubuntu17 ,即使安装成功后,也会出现各种妖蛾子,本人就被这种问题困扰了好一会.在Ubuntu 18.04下安装mysql,建议安装8.0以上版本! 1. 配置 ...
- C语言 链表(Dev C++/分文件版)
头文件:quechain.h struct Question { int _id; struct Question* pre; struct Question* next; }; void chain ...
- Vue中table表头合并的用法
<div class="panel-container"> <div> <table class="table-head" wid ...
- 【阿里云服务器】外网无法访问tomcat下部署的项目
问题提出:在ESC实例上部署了jdk和tomcat(略,上云了,上云了),启动tomct后,内网可以访问8080端口,外网无法访问8080. 系统环境:winsdow 2008 企业版 解决方案: 在 ...