CRM开发报名流程

在客户信息里点击报名进入报名页面,销售选择好报名的大致信息点击下一步会生成一个链接给客户填写,如果该用户报名已存在也会生成一条链接

在crm/urls.py文件中设置报名url

url(r'^customer/(d+)/enrollment/$', views.enrollment, name="enrollment"

在crm/views.py文件中创建enrollment函数

因为在报名页面里面的数据需要从报名表里面得出来,所以得先获取表单里面的值,所以新建crm/forms.py

from django.forms import ModelForm
from PerfectCRM.Perfectcrm.crm import models

class EnrollmentForm(ModelForm):

    def __new__(cls,*args,**kwargs):
        #super(CustomerForm,self).__new__(*args,**kwargs)
        # print("request.POST:",request.POST)
      #表名,表对象值
        for field_name,field_obj in cls.base_fields.items():
            #print(field_name,dir(field_obj))
            #给表输入框添加class
            field_obj.widget.attrs['class'] = 'form-control'

        return ModelForm.__new__(cls)
    class Meta:
        model = models.Enrollment
       #表单展示的字段
        fields = ["enrolled_class","consultant"] 

在crm/views.py获取EnrollmentForm类并返回给前端,后端处理请求的数据

from django.shortcuts import render
from PerfectCRM.Perfectcrm.crm.forms import EnrollmentForm
from PerfectCRM.Perfectcrm.crm import models
from django.db import IntegrityError
def enrollment(request,customer_id):
    #根据请求过来的customet_id获得该id的客户对象
    customer_obj = models.Customer.objects.get(id=customer_id)
    msgs={}
    if request.method == "POST":
        #把请求的数据放到表单里面
        enroll_form = EnrollmentForm(request.POST)
        #表单里面的是有效的
        if enroll_form.is_valid():
            msg='''请将此链接发送给客户进行填写:
                    http://localhost:8000/crm/customer/registration/{enroll_obj_id}/'''
            try:
                print("cleaned_data",enroll_form.cleaned_data)
                #在enroll表单中加上前端的客户请求的值,因为客户的名称是从customer中获取,在enroll表中是没有的,会报错所以才在enroll中的customer添加他的值
                enroll_form.cleaned_data["customer"]= customer_obj
                #创建表单的值报名
                enroll_obj = models.Enrollment.objects.create(**enroll_form.cleaned_data)
                #报名生成的链接
                msgs["msg"] = msg.format(enroll_obj_id=enroll_obj.id)
                #捕捉当用户已存在的错误
            except IntegrityError as e:
                #如果是改用户报名之前已经存在,那么报名的id就是要去customer表中找,和enroll两个表中找关联的
                enroll_obj =models.Enrollment.objects.get(customer_id=customer_obj.id,
                                                          enrolled_class_id = enroll_form.cleaned_data["enrolled_class"].id)
                enroll_form.add_error("__all__","该用户已存在")
                msgs["msg"] = msg.format(enroll_obj_id=enroll_obj.id)

    else:
        enroll_form = EnrollmentForm()
    return render(request,"sales/enrollment.html",{"enroll_form":enroll_form,
                                                   "customer_obj":customer_obj,
                                                   "msgs":msgs})
 

在templates/sales/enrollment.html新建处理前端的页面

{% extends 'index.html'%}
{% block page-content %}

<div id="content">
    <form class="form-horizontal col-lg-7" role="form" method="post">{%csrf_token%}
        <span style="color: red">{{enroll_form.errors}}</span>

        <div class="form-group form-group-lg">
            <label class="col-sm-2 control-label">客户</label>
            <div class="col-sm-10">
                {{customer_obj.qq}}
            </div>
        </div>
      {% for field in enroll_form %}
          <div class="form-group form-group-lg">
            <label class="col-sm-2 control-label">{{field.label}}</label>
            <div class="col-sm-10">
                {{field}}
            </div>
          </div>
      {% endfor %}
      <input type="submit" class="btn btn-info pull-right" value="下一步">
    </form>
    <div class="row">
        <ul>
            {% for k,v in msgs.items%}
                <li>{{k}}:{{v}}</li>
            {% endfor %}
        </ul>
    </div>
</div>
{% endblock%}
原文地址:https://www.cnblogs.com/venvive/p/11449184.html