当前位置: 首页 > 网络应用技术

如何添加和删除和修改django

时间:2023-03-08 22:09:42 网络应用技术

  简介:许多朋友询问了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如何增加删除,删除和调查的更多信息,请在此站点上找到它。