CRM项目表结构设计、登录注册、展示数据、删除、分页、搜索、编辑跳转、自定义simple_tag、事务 + 行级锁、批量初始化学习记录、每次请求 都做权限的校验、动态生成一级菜单、动态生成二级菜单、非菜单的权限的归属的问题
客户关系管理系统
表结构的设计
- 
客户表 
- 
用户表 
- 
校区表 
- 
部门表 
- 
跟进记录表 
- 
报名表 
- 
缴费表 
班主任
- 
班级表 
- 
课程记录表 
- 
学习记录表 
登录注册
注册—— modelform
 from django import forms
 
 class Form(forms.ModelForm):
     class Meta:
         model = models.xxx
         fields = "__all__"  # ['name','pwd']
         exclude = ['is_active']
         
     def clean_字段名(self):
         # 校验规则
         # 通过 返回当前字段的值
         # 不通过 抛出异常
         #  raise ValidationError('xx')
         
       
     def clean(self):
         # 校验规则
         # 通过 返回所有字段的值  self.cleaned_data
         # 不通过 抛出异常
         # self.add_error('re_password', '两次密码不一致!!')
         #  raise ValidationError('xx')  "__all__"
     
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         # 自定义的操作
         for name, field in self.fields.items():
             # print(name, field)
             if isinstance(field, (forms.BooleanField, MultiSelectFormField)):
                 continue
             field.widget.attrs['class'] = 'form-control'
             
             field.choices = [(),()]
             
 # 新增
 def change(request):
     form_obj = Form()
     if request.method =='POST':
         form_obj = Form(request.POST)
         if form_obj.is_valid():  # 对数据做校验的
             form_obj.save()
             # 返回展示页面
 
     return render(request,'form.html',{'form_obj':form_obj})
       
     
 
 # 编辑
 def change(request,pk):
     obj = models.XXX.objects.filter(pk=pk).first()
     form_obj = Form(instance=obj)
     if request.method =='POST':
         form_obj = Form(request.POST,instance=obj)
         if form_obj.is_valid():  # 对数据做校验的
             form_obj.save()
             # 返回展示页面
 
     return render(request,'form.html',{'form_obj':form_obj})
     
 # form.html
 
 {% for field in form_obj %}
 
     {{ field.label }}  _>  提示
     {{ field.id_for_label }}  _>  input框的id
  
                    
                     
                    
                 
                    
                