添删一个功能时,都是从你的url开始写起.你的url就对应一个功能
1.先做展示;
(1).crm/urls.py中:
#增加客户
url(r'^customer/add/',views.add_customer,name='add_customer'),
(2).views.py中:
#增加客户
def add_customer(request):
return render(request,'crm/add_customer.html')
(3).templates/crm/add_customer.html:
{% extends 'layout.html' %}
{% block content %}
{% endblock %}
效果如下:这样模版就好了。
开始往它面板中添加内容部分,它的内容部分要用form表单---modelform实现
(4).开始写form,crm/forms.py中:----跟form相关的都写在此文件中
# 客户form
class CustomerForm(forms.ModelForm):
class Meta:#做配置用
model = models.Customer
fields = '__all__' #要显示的字段
widgets = { #此插件作用是把course课程字段改成多选框
'course': forms.widgets.SelectMultiple
}
def __init__(self, *args, **kwargs):#初始化--用来给多个插件做css样式
super().__init__(*args, **kwargs)#继承父类的初始法
for filed in self.fields.values():#给每一个插件
filed.widget.attrs.update({'class': 'form-control'}) #update是更新attrs插件字典的css样式
(5).开始使用form表单:先在views.py中导入它,并实例化对象再传给前端模版,前端模版中再渲染form即可
views.py中:
#增加客户
def add_customer(request):
#实例化一个空的form对象
form_obj = CustomerForm
return render(request,'crm/add_customer.html',{"form_obj":form_obj})
(6).add_customer.html中:将customer_list.html中面板拷贝到add_customer.html中并做个性修改:
{% extends 'layout.html' %}
{% block content %}
添加客户
{% endblock %}效果如下:显示就做完了!
2.那怎么提交?--开始写提交逻辑
(1).views.py中:
# 增加客户
def add_customer(request):
# 实例化一个空的form对象
form_obj = CustomerForm()
if request.method == 'POST':#提交逻辑判断
# 实例化一个带提交数据的form对象
form_obj = CustomerForm(request.POST)
# 对提交数据进行校验
if form_obj.is_valid():#校验成功则
# 去数据库创建对象
form_obj.save() #提交成功后
return redirect(reverse('customer'))#再跳转到customer客户列表页面
return render(request, 'crm/add_customer.html', {"form_obj": form_obj})(2)开始测试在增加客户页面添加客户并提交:
点击提交按钮后,效果如下,提交成功了:
3.在展示页面把添加客户按钮显示下:
customer_list.html中:如下加一个a标签,并加button按钮,一点添加就能跳到add_customer页面了。
添加 {# url反向解析 #}
效果如下图: