我的交易列表
# 基本展示
现目前, 管理员用户 可以看到所有的交易记录.. 那么, 角色为客户的用户登陆后呢?也应该能看到自己的交易记录!!
都是在前面实现过的功能, 改巴改巴集成到这里面即可..
1. 我的交易列表页面跟管理员登陆后,看到的 `首页/客户列表/交易记录列表` 是差不多的.. 改巴改巴能行.
相比之下,我的交易列表页面少了新增的功能,多了搜索查询(根据关键字搜索)的功能!!
2. 在管理员登陆后,看到的客户列表页面是实现过搜索查询(根据关键字搜索)功能的.也改巴改巴就行.
from django.shortcuts import render
from web import models
from utils.pager import Pagination
from django.db.models import Q
def my_transaction_list(request):
""" 我的交易记录 """
keyword = request.GET.get("keyword", "").strip()
con = Q()
if keyword: # 只根据订单号搜
con.connector = 'OR'
con.children.append(('order_oid__contains', keyword))
queryset = models.TransactionRecord.objects. \
filter(customer_id=request.nb_user.id, active=1). \
filter(con).order_by("-id")
pager = Pagination(request, queryset)
return render(request, 'my_transaction_list.html', {"pager": pager, "keyword": keyword})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 组合搜索组件
根据关键字搜索, 它在后端的逻辑是可以根据当前表中的字段、或者跨表字段的值来匹配搜索的值..
它是有局限性的, 针对于有choices属性的字段, 根据关键字搜索较麻烦, 因为像 "充值" 在数据库里存储的是1.
需要根据 "充值" 转变成条件 "1", 再根据 "1" 去搜索.. 所以用户在填写搜索关键字 "充值" 是不能写错的..
使用组合搜索, 相对简便些!!
# 简单使用
step1: 获取 group.py文件并放到项目中 (通常是utils目录). step2: 在视图函数中配置 step3: 前端页面中配置
视图函数中的代码
from django.shortcuts import render
from web import models
from django.shortcuts import render
from web import models
from utils.pager import Pagination
from utils.group import Option, get_search_group_condition
from django.db.models import Q
def my_transaction_list(request):
""" 我的交易记录 """
# ◆ 组合搜索配置 - 页面展示
search_group = [Option('charge_type'), ]
search_group_row_list = []
for option_object in search_group:
row = option_object.get_queryset_or_tuple(models.TransactionRecord, request)
search_group_row_list.append(row)
# ◆ 组合搜索配置 - 构建搜索条件
conn = get_search_group_condition(search_group, request)
# 根据关键字搜索!
keyword = request.GET.get("keyword", "").strip()
con = Q()
if keyword: # 只根据订单号搜
con.connector = 'OR'
con.children.append(('order_oid__contains', keyword))
queryset = models.TransactionRecord.objects. \
filter(customer_id=request.nb_user.id, active=1). \
filter(**conn). \
filter(con).order_by("-id")
pager = Pagination(request, queryset)
context = {
"pager": pager,
"keyword": keyword,
"search_group_row_list": search_group_row_list
}
return render(request, 'my_transaction_list.html', context)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
前端页面的关键代码
... ... ...
{% block css %}
<link rel="stylesheet" href="{% static 'css/search-group.css' %}">
{% endblock %}
{% block content %}
{% if search_group_row_list %}
<!-- 生成了一个面板 -->
<div class="panel panel-default">
<div class="panel-heading">
<i class="fa fa-filter" aria-hidden="true"></i> 快速筛选
</div>
<div class="panel-body">
<div class="search-group">
{% for row in search_group_row_list %}
<div class="row">
{% for obj in row %}
{{ obj|safe }}
{% endfor %}
</div>
{% endfor %}
</div>
</div>
</div>
{% endif %}
... ... ...
{% endblock %}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 封装和使用
来细细剖析下, group.py 这个组合搜索组件 实现的细节!!!
略. (因为后续开发了 rbac组件和stark组件, 这个基本上就不会用到了..
需要的时候, 或者有时间的时, 再来理下逻辑吧!!
# 交易记录
这个交易记录是针对管理员的, 管理员可以看到所有的交易记录!!
略. 后续我会通过 rbac组件和stark组件, 重构 订单系统!! 也会加上这个功能.
该需求效果截图如下:
# 总结
到现目前, 实现了哪些需求.
- 权限和菜单
- 动态菜单,不同用户角色【配置文件】
```
- 配置文件,写配置用户级别配置 + 默认配置
- 构造属于自己的结构:权限、菜单字典。
- 数据库获取用户角色
```
- 默认选中和展开
```
- inclusion_tag
```
- 权限校验
```
- 中间件
- request.nb_user 赋值
```
- 控制按钮是否显示
```
- filter,可以模板语言中的if else的条件
```
- 基于Form和ModelForm实现增删改查
- 构建的了BootStrapForm类实现BootStrap样式 + 免除BootStrap样式
- 删除/撤单
- 直接超链接删除,跳转
- 对话框 + ajax删除(推荐)
- 直接超链接删除,跳转 + message => 成功和失败的提醒.(推荐)
- 添加和编辑
- 跳转到添加和编辑页面,成功后跳转回来.
- 对话框 + ajax
- 原条件保留
- 删除
- 编辑
- 分页
- 关键字搜索
- 组合搜索
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35