简介:许多朋友询问了Django是如何添加,删除和修改的,本文的首席CTO Note将为您提供详细的答案,以供所有人参考。我希望这对每个人都会有所帮助!让我们一起看看!
主页菜单是根据用户的权威动态生成的,不同的菜单对应于不同的功能视图。Menu添加,删除和更改。
2.路线
1.html
没有固定的要求,您可以自己编写文件统一管理,也可以在多个文件中使用时编写它。
建立数据模型后,Django将为您自动生成一组数据库APIS,允许您创建,检索,更新和删除对象并将它们存储在Models.py中。
有关模型的更多操作,请参考。
第10节,案例客户关系管理系统,删除,纠正,充电笔记
1.建立模型
1.导入模型
fromdjango.dbimportmodels
2.创建一个学生桌
classstudent(models.model):#c c c c
name = models.charfield(max_length = 20)
age = model.smallintegerfield()
sex =模型。
QQ = model.Charfield(max_length = 20,unique = true)
phone = models.charfield(max_length = 20,unique = true)
c_time = models.detetime field(verbose_name ='创建时间',auto_now_add = true)
e_time = models.detetimefield(verbose_name ='修改时间',auto_now = true)
等级= models.foreignkey('等级',on_delete = models.set_null,null = true)
IS_DELETE = model.booleanfield(default = false)#在常规开发过程中,我们不会直接删除数据,而是添加IS_DELETE字段的数据以标记数据的状态。
def__str __(self):
返回'%s-%s-%s'%(self.name,self.age,self.sex)
3.创建学生详细信息表格
ClassStudentDetail(Models.Model):#学生详细信息表
num = models.charfield('id卡',max_length = 40,unique = true)
College = Models.Charfield('毕业学校',max_length = 20,默认='')
student = models.onetoonefield('student',on_delete = models.cascade,rection_name ='lidet')
def__str __(self):
返回'%s-%s'%(self.num,self.college)
4.创建一个班级表
classGrade(models.model):#类表
name = models.charfield('class name',max_length = 20)
num = models.charfield('分类',max_length = 20)
def__str __(self):
返回'%s-%s'%(self.name,self.num)
5.创建一个课程表
ClassCourse(Models.Model):#课程表
name = models.charfield('课程名称',max_length = 20)
student = models.manytomanyfield('学生',通过='注册')
def__str __(self):
返回'%s'%self.name
6.创建学生表和课程表的中间手表
classEnroll(models.model):#
student = models.foreignkey('学生',on_delete = models.cascade)
course = models.foreignkey('课程',on_delete = models.cascade)
PAY = Models.FloatField('付款金额',默认值= 0)
c_time = models.detetime field(verbose_name ='创建时间',auto_now_add = true)
def__str __(self):
返回'%s'%self.pay
##
2.实现其他,删除和调查功能实现
1.索引页面视图功能
fromdjango.shortcutsimportrender,重定向,反向
fromdjango.httpimporttpresponse
FromStudent.ModelSimportstudent,等级,StudentDetail
fromdjango.db.modelsimportq
fromdjango.core.paginatorimportpaginator
#在这里创建您的视图。
Defindex(请求):
部分='学生名单'
搜索= request.post.get('search','')。strip()#从html表单传递的绘图参数
ifsearch:
ifsearch.isdigit():#如果是数字类型
sts = student.objects.filter(q(qq = search)| q(电话=搜索),is_delete = false)#使用qq和电话匹配
else:#如果是字符类型
sts = student.objects.filter(name = search,is_delete = false)#
else:#搜索不匹配,并检查所有学生
sts = student.objects.filter(is_delete = false)
sts = sts.order_by('-c_time')#
returnrender(请求,'student/index.html',context = {
'sts':sts,
“部分”:部分,
“搜索”:搜索,
})
2.学生删除页面视图
defstudent_delete(请求,PK):
student = student.objects.get(pk = pk)#s s s s s s s p p p p p p p p p p s s s s
student.is_delete = true#mark is_delete as true,
student.save()#保存
returnredirect(反向('student:index'))
3.学生详细信息页面查看
defstudent_detail(请求,PK):
部分='学生详细信息'
等级=等级。
sts = student.objects.gets(pk = pk)#获取使用当前ID为PK的学生信息
等级=等级。
详细信息= StudentDetail.objects.get(student = STS)#指定学生的查询详细信息
returnrender(请求,'sut剂/student_detail.html',context = {
“部分”:部分,
“成绩”:等级,
'sts':sts,
“等级”:等级,
“细节”:细节,
})
4.添加页面视图功能
defstudent_add(请求):
部分='添加学生信息'
等级= grade.objects.all()#
ifrequest.method =='get':
returnrender(请求,'sut剂/student_detail.html',context = {
“部分”:部分,
“成绩”:等级,
})
ifrequest.method =='post':
#获取课程信息
grade_id = request.post.get('等级')#获取等级。
尝试:
等级=等级。
除了:
等级=无
#获取学生信息名称,年龄,性别,QQ,电话
数据= {
'name':request.post.get('name'),
'age':request.post.get('age'),
'sex':request.post.get('sex'),
'qq':request.post.get('qq'),
“电话”:request.post.get('phone'),
“等级”:与学生相关的等级#表
}
student = student.objects.create(**数据)
#获取学生详细信息信息
StudentDetail.Objects.create(
num = request.post.get('num'),
College = request.post.get('College'),
学生=学生#桌协会
治愈
returnredirect(反向('student:index'))
5.修改学生信息页面视图功能
defstudent_edit(请求,PK):
部分='修改学生信息'
sts = student.objects.get(pk = pk)#查询ID学生是PK
等级=等级。
详细信息= StudentDetail.objects.get(student = STS)#指定学生的查询详细信息
ifrequest.method =='get':
returnrender(请求,'sut剂/student_detail.html',context = {
“部分”:部分,
'sts':sts,
“等级”:等级,
“细节”:细节,
})
ifrequest.method =='post':
#获取课程信息
grade_id = request.post.get('等级')#从前端返回等级
尝试:
等级=等级。
除了:
等级=无
#获取学生信息并修改
student = student.objects.get(pk = pk)
student.name = request.post.get('name')
student.age = request.post.get('age')
Student.Sex = request.post.get('性')
student.qq = request.post.get('qq')
student.phone = request.post.get('phone')
student.grade =等级#桌协会
#获取学生详细信息
尝试:
详细信息= student.detail#更正,关联表在学生中
除了:
详细信息= StudentDetail()
细节。学生=学生#表协会,协会表在demail中
devail.num = request.post.get('num')
difail.college = request.post.get('College')
lide.save()#保存
student.save()#保存
returnredirect(反向('student:index'))
第三,分页函数实施
1.主页的页面方法
1.1主页的视图功能
Defindex(请求):
部分='学生名单'
搜索= request.post.get('search','')。strip()#从html表单传递的绘图参数
ifsearch:
ifsearch.isdigit():#如果是数字类型
sts = student.objects.filter(q(qq = search)| q(电话=搜索),is_delete = false)#使用qq和电话匹配
else:#如果是字符类型
sts = student.objects.filter(name = search,is_delete = false)#
else:#搜索不匹配,并检查所有学生
sts = student.objects.filter(is_delete = false)
sts = sts.order_by('-c_time')#
#分分
total_num = sts.count()#总数据金额
per_page = int(request.get.get.get('per_page',5))#每个页面默认号码5
page = int(request.get.get('page',1))#p p p p p p p p p 1
p = paginator(sts,per_page,all_empty_first_page = true)
sts = p.get_page(page)#每页显示的数据
total_page = p.num_pages#总页码
page_list = p.page_range#获取页面范围
returnrender(请求,'student/index.html',context = {
'sts':sts,
“部分”:部分,
“搜索”:搜索,
'total_num':total_num,
'total_page':total_page,
“页面”:页面,
'per_page':per_page,
'page_list':page_list,
})
1.2,html中页码的设置
navaria-label =“页面导航”样式=“ display:inline-black”
ulclass =“分页”
li {%ifpage == 1%} class =“禁用” {%endif%}
ahref =“ {%如果付费1%} {%url'student:index'%}?page = {page | add:-1} per_page = {per_page} {%else%} {%url url'quttay'student:index'index'%}?page = {pag}} per_page = {{per_page}} {%endif%}“ aria-label =“ pronos”
Spanaria-Hidden =“ true”以前/跨度
/A
/li
{in page_list%}的i%}
li {%ifpage == i%} class =“ active” {%endif%} ahref =“ {{request.path}?page = {i} per_page = {per_page}” {}}}}}}/a/a/a/a/li
{%endfor%}
li {%ifpage == total_page%} class =“ disabled” {%endif%}
ahref =“ {%如果付费topal_page%} {%url'student:index'%}?page = {page | add:1} per_page = {per_page} {%ell's} {%ell ans} {%url'suden'studen:inst studen:index'%}?page = {pag}} per_page = {{per_page}}} {%endif%}“ aria-label =“ next”“”
Spanaria-Hidden =“ true”下一个/跨度
/A
/li
/ul
/nav
! - 单个按钮 -
Divlass =“ BTN-ROUND”样式=“ Display:inline-Black; Margin-Top:-68px“”
buttonType =“ button” class =“ btn btn btn-default dropdown-toggle” data-toggle =“下拉” aria-haspopup =“ true” aria-expanded =“ false”
{per_page}} bar/page spanclass =“ caret”/span
/按钮
ulclass =“下拉菜单”“”
liahref =“ {%url'学生:index'%}?page = {page}} per_page = 5“ 5”页/a/a/li
liahref =“ {%url'student:index'%}?page = {page}} per_page = 10“ 10” 10英寸页/a/a/a/li
liahref =“ {%url'学生:index'%}?page = {page}} per_page = 15“ 15”页/a/a/li
liahref =“ {%url'student:index'%}?page = {page}} per_page = 20“ 20” 20“页/a/a/li
/ul
/div
2.对于主页分页方法2(使用标签)
2.1,索引中的视图功能
Defindex(请求):
部分='学生名单'
搜索= request.post.get('search','')。strip()#从html表单传递的绘图参数
ifsearch:
ifsearch.isdigit():#如果是数字类型
sts = student.objects.filter(q(qq = search)| q(电话=搜索),is_delete = false)#使用qq和电话匹配
else:#如果是字符类型
sts = student.objects.filter(name = search,is_delete = false)#
else:#搜索不匹配,并检查所有学生
sts = student.objects.filter(is_delete = false)
sts = sts.order_by('-c_time')#
#分分
total_num = sts.count()#总数据金额
per_page = int(request.get.get.get('per_page',5))#每个页面默认号码5
page = int(request.get.get('page',1))#p p p p p p p p p 1
p = paginator(sts,per_page,all_empty_first_page = true)
sts = p.get_page(page)#每页显示的数据
total_page = p.num_pages#总页码
page_list = p.page_range#获取页面范围
returnrender(请求,'student/index.html',context = {
'sts':sts,
“部分”:部分,
“搜索”:搜索,
'total_num':total_num,
'total_page':total_page,
“页面”:页面,
'per_page':per_page,
'page_list':page_list,
})
2.2。在templatetags文件夹中创建student_custormer_tags.py
#!/usr/bin/python
# - * - 编码:UTF-8 - * -
#作者:CYB时间:2019/5/25 23:34
FromDjangoImportTemplate
寄存器= template.library()
@register.inclusion_tag('student/paginitor.html',take_context = true)
defipination_html(上下文):#d d d d d d d d d d d d上下
total_page = context ['total_page']#总页码
pay = context ['page']#显示第一页的数据
page_list = context ['page_list']#页范围
per_page = context ['per_page']#每个页面号码
'''
假设total_page = 6
两个页码控制方法:
当num = 1#当前页面的当前页面上有几页
上一个1 2 3下一页
前4 5 6下一页
上一页1 2下一页
前5 6个下一页
当num = 2#当前页面的当前页面上有几页
上一个1 2 3下一页
上一个1 2 3 4下一页
上一个1 2 3 4 5下一页
前2 3 4 5 6下一页
前4 5 6下一页
'''
pay_list = []
num = 2
#1,左 +当前页面上显示的页码列表
#1.1,当左边不够时,页面范围1到当前页面
ifpage-num = 0:
foriinrange(1,第+1页):
page_list.append(i)
else:#当左侧足以显示时,页面范围为当前页面的PAG-NUM
foriinrange(Page-num,Page+1):
page_list.append(i)
#2,右侧显示的页码列表 +当前页面
#2.1,当右边不够时,页码范围当前页面到total_page
ifpage+num = total_page:
foriinrange(Page+1,total_page+1):
page_list.append(i)
#2.2,当右侧足够时,页面范围(当前页+1)to(当前页 +num)
别的:
forInrange(页+1,页+num):
page_list.append(i)
返回 {
'total_page':total_page,
“页面”:页面,
'page_list':page_list,
'per_page':per_page
}
2.3,构建新构建的标签渲染模板paginitor.html
ulclass =“分页”
li {%ifpage == 1%} class =“禁用” {%endif%}
a {%ifpage1%} href =“ https://www.shouxicto.com/article/ {%url'student:index'%}?{{{per_page}} {%endif%}“ aria-label =“以前”
Spanaria-Hidden =“ true”?/span
/A
/li
{page_list%的page_num%}
li {%ifpage_num == page%} class =“ active” {%endif%} ahref =“ {{request.path}?page = {page_num} per_page = {per_page}}}}}}} {page_num} {page_num}
{%endfor%}
li {%ifpage == total_page%} class =“ disabled” {%endif%}
a {%ifpage total_page%} href =“ https://www.shouxicto.com/article/ {{request.path}}?}} {%endif%}“ aria-label =“ next”
Spanaria-Hidden =“ true”?/span
/A
/li
/ul
2.4。在index.html中导入后退出
1.导入:{%加载student_customer_tags%}
2.报价:
nav aria-label =“页面导航”样式=“ display:inline-black”
{%pagination_html%}
/nav
第四页显示
1.主页显示
2.添加页面显示
3.修改页面显示
结论:以上是首席CTO的全部内容,请注意有关如何将Django添加到Django的内容。感谢您阅读本网站的内容。我希望这对您有帮助。有关Django如何增加删除,删除和调查的更多信息,请在此站点上找到它。