---恢复内容开始---

一>
在数据库进行循环取多对多
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的更多相关文章

随机推荐

  1. [LeetCode] 304. Range Sum Query 2D - Immutable 二维区域和检索 - 不可变

    Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...

  2. Vue(六)插槽(2.6.0+)

    插槽在vue2.6.0开始有了新的更新 具名插槽(数据来自父组件) 子组件(定义插槽)这里版本前后没什么变化 <template> <div> <header> & ...

  3. python学习-37 其他的文件处理方法

    f = open('test.txt','r+',encoding='utf-8') f.flush() # 刷新 f.readline() print(f.tell()) # 说明光标位置在哪里 ( ...

  4. 【Linux】一步一步学Linux——Bash常用快捷键(11)

    目录 00. 目录 01. 编辑命令 02. 搜索命令 03. 控制命令 04. 其它 05. 参考 00. 目录 @ 生活在 Bash Shell 中,熟记以下快捷键,将极大的提高你的命令行操作效率 ...

  5. 关于fastjson与jackson在反序列化bool型时的区别

    背景 在测试中,两个项目a,b的接口参数用到了Bool类型,当传参"0",项目a通过了,项目b报错了,排查了下,项目b的那个接口,在对传参反序列化时就出现了问题,最后发现两个项目使 ...

  6. Spark 系列(六)—— 累加器与广播变量

    一.简介 在 Spark 中,提供了两种类型的共享变量:累加器 (accumulator) 与广播变量 (broadcast variable): 累加器:用来对信息进行聚合,主要用于累计计数等场景: ...

  7. java之struts2的数据处理

    这里的数据处理,指的是页面上的数据与Action中的数据的处理. struts2中有3种方式来接收请求提交的数据.分别是:属性驱动方式.对象驱动方式.模型驱动方式 1. 属性驱动方式 要求页面中的表单 ...

  8. 【OO学习】OO第三单元作业总结

    [OO学习]OO第三单元作业总结 第三单元,我们学习了JML语言,用来进行形式化设计.本单元包括三次作业,通过给定的JML来实行了一个对路径的管理系统,最后完成了一个地铁系统,来管理不同的线路,求得关 ...

  9. 【转载】C#中使用Average方法对List集合中相应元素求平均值

    在C#的List集合操作中,有时候需要对List集合元素进行汇总求平均值,如数值类型的List集合元素,有时候对象类型的List集合也需要对集合中的元素的某个对象进行汇总求平均值,此时都可以使用到Av ...

  10. 重置文件reset

    body { margin:0; padding:0; font-family: Helvetica, STHeiti, Droid Sans Fallback; // font-family: '微 ...