djangCrm
---恢复内容开始---
一>
在数据库进行循环取多对多
def get_classlist(self):
l=[]
for cls in self.class_list.all():
l.append(str(cls))
return mark_safe(",".join(l))
<td>{{ customer.get_classlist }}</td>
二> 可以通过admin进入控制台进行录入数据库
1 from django.contrib import admin
2
3 # Register your models here.
4 from app01.models import *
5 admin.site.register(UserInfo)
6 admin.site.register(ClassList)
7 admin.site.register(Customer)
8 admin.site.register(Campuses)
在urls 引入
from django.contrib import admin 三>
进行数据录入 四>
更改auth,向其添加字段
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
tel=models.CharField(max_length=32,null=True,blank=True)
gender=models.IntegerField(choices=((1,"男"),(2,"女")),default=1)
五>别名
两个路径一个页面,通过reverse 判断
from django.urls import reverse 这里返回的是过略后的数据库
def customers(request):
if reverse("customers_list")==request.path: customers_list = Customer.objects.all()
else:
customers_list = Customer.objects.filter(consultant=request.user)
两个别名
path("customers/",views.customers,name="customers_list"),
path("mycustomers/",views.customers,name="mycustomers"),
六>关于过略
from django.db.models import Q
单个过略
val=request.GET,get("q")
filter=request.GRT.get("filter")
if val:
q=Q()
q.children.append((filter,val),) #y由于不可以将变量传到搜索的数据库,所以引用Q,通过q.children.append将两个变量赋值,后面可以继续
添加数据,默认且的关系
customers_list=customers_list.filter(q) djangoCrm2
1.模糊查询
由于Q的可以传递字符串属性,可以进行拼接__contains 进行搜索
2.未报名筛选,未报名的存储在models的 enroll_status_choices中,存储的是
enroll_status_choices = (('signed', "已报名"),
('unregistered', "未报名"),
('studying', '学习中'),
('paid_in_full', "学费已交齐"))
需要找到元祖对应的字段,在前段用get__signed__display显示
方法,找到select选择的属性,点击属性的时候讲原有的optiopn 替换成那4个状态,进行change的查询
$("#s1").change(function () {
if ($(this).val() === "status") {
let s1 = `
<select name="q" id="s2">
<option value="signed">已报名</option>
<option value="unregistered">未报名</option>
<option value="studying">学习中</option>
<option value="paid_in_full">学费已交齐</option>
</select>
`;
$(this).next().replaceWith(s1)
}
})
未报名筛选
3.批量处理
进行批量处理时,需要将文件与checkbox 写入一个form表单,在循环的文件加入checkbox循环
运用获取批量处理的value 执行面向对象的反射
<td><input type="checkbox" name="select_pk_list" value="{{ customer.pk }}"></td>
def post(self,request):
#批量处理
print(request.POST)
func_str=request.POST.get("action")
data=request.POST.getlist("select_pk_list")
if not hasattr(self,func_str):
return HttpResponse("非法输入")
else:
func=getattr(self,func_str)
queryset=Customer.objects.filter(pk__in=data)
func(request,queryset)
return redirect(request.path)
def patch_delete(self,request,queryset):
queryset.update(sex="male") 批量处理
4.添加客户
通过forms.ModelForm 进行 MODELFORM操作, 引入form 定义form表单
class CustomerModelForm(forms.ModelForm):
class=MATE fields=__all__"" model=Customer
通过传递form
form=CustomerModelForm(request.POst)
在页面上循环取出
成功返回添加页面
失败返回添加页面
5<>
编辑
唯一于添加不同的是
urls 通过re_path进行捕获到主键
edit_obj=request.POST.get(px=id)
form=CustomerModelForm(request.POst,instance=edit.obj)
来区分
这里若是要返回上一级,则需要额外她在在页面添加一个他要返回的上一级地址,
因为他只向的是edit1这个标准路由,要去到上一级需要拼接并且存储在返回的编辑标签上
然后利用redirect重定向 方法为
path=request.path
next="?next=%s",%spath
6>
公户转私户
用反射将
consultant=request.user
即可 7>
未报名颜色
def get_status(self):
status_color={
"studying":"green",
"signed":"#B03060",
"unregistered":"red",
"paid_in_full":"blue"
}
return mark_safe("<span style='color:white'>%s</span>"%(status_color[self.status],self.get_status_display()))
在前端传递的是对象,有自己的方法,,可以再models 生成一个方法,让这个方法被调用,返回值就是这个方法的结果
djangCrm的更多相关文章
随机推荐
- 最新 北森java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.北森等10家互联网公司的校招Offer,因为某些自身原因最终选择了北森.6.7月主要是做系统复习.项目复盘.LeetCode ...
- laravel 配置自动加载多路由文件
在 app\Providers\RouteServiceProvider文件下增加方法&注册: 增加之后就可以在routers下建立api文件夹,在里面添加路由了
- ubuntu16.04+cuda9.0_cudnn7.5+tensorflow-gpu==1.12.0
1.查找可用的tensorflow源,该命令运行后终端会输出所有可用的源 anaconda search -t conda tensorflow 2.这里name是上一步中输出源的tensorflow ...
- Linux+QT界面开发(含数据库)小结
今天十一国庆节,过了一个很有意义的国庆节,去了龙岗区图书馆,第一次知道了借的书可以在任意分馆归还!这个切实方便了广大读者.针对Linux应用,特意借阅一本:<linux环境下Qt4图形界面与My ...
- Java -- 基于JDK1.8的ThreadLocal源码分析
1,最近在做一个需求的时候需要对外部暴露一个值得应用 ,一般来说直接写个单例,将这个成员变量的值暴露出去就ok了,但是当时突然灵机一动(现在回想是个多余的想法),想到handle源码里面有使用过Th ...
- LOJ3119 CTS2019 随机立方体 概率、容斥、二项式反演
传送门 为了方便我们设\(N\)是\(N,M,L\)中的最小值,某一个位置\((x,y,z)\)所控制的位置为集合\(\{(a,b,c) \mid a = x \text{或} b = y \text ...
- 关于base64的一个小细节
Base64出现\r\n的问题 前段时间遇到这么一个小问题: 后台接口返回一个图片的base64串,同事拿着这个字符串,找了一个在线图片和Base64字符串互转的工具网站,想将字符串转成图片,死活转不 ...
- JSP 9大隐式对象和四个作用域的范围
Java中 九大隐式对象说明 输入/输出对象: request response out 作用域通信对象: session application pageContext Servlet ...
- 【转载】C#使用Random类来生成指定范围内的随机数
C#的程序应用的开发中,可以使用Random随机数类的对象来生成相应的随机数,通过Random随机数对象生成随机数的时候,支持设置随机数的最小值和最大值,例如可以指定生成1到1000范围内的随机数.R ...
- rabbitmq实战:一、天降奇兵
缘由,最近换了工作,而新的项目中使用了celery+rabbitmq来实现一个分布式任务队列系统,为了能够维护好这套系统,只能来学习一下这两个组件,顺便把学习笔记记录下来,留作以后回顾,当然如果碰巧能 ...