form组件的Choice字段

  还是基于出版社和书的模型来详解

  models.py(模型)

from django.db import models# Create your models here.
class Book(models.Model):title = models.CharField(max_length=32)pub_date = models.DateField()price = models.DecimalField(max_digits=5, decimal_places=2)
    state=models.IntegerField(choices=((1,'已出版'),(2,'未出版')),default=1)  #在数据库存储是以数字存储的,怎么取值?book是类的对象--book.get_state_displaypublish = models.ForeignKey(to="Publish", to_field="id", on_delete=models.CASCADE, null=True)authors = models.ManyToManyField("Author", db_table="book2authors")  # 创建关系表def __str__(self):return self.titleclass Publish(models.Model):name = models.CharField(max_length=32)city = models.CharField(max_length=32)email = models.CharField(max_length=32)def __str__(self):return self.nameclass Author(models.Model):name = models.CharField(max_length=32)age = models.IntegerField()
    gender=models.IntegerField(choices=((1,'男'),(2,'女'),),default=1)#在数据库存储是以数字存储的,怎么取值?book是类的对象--book.get_gender_display
 

  urls.py(路径分发)

urlpatterns = [path('admin/', admin.site.urls),path('books/', views.books, name='books'),path('addbooks/', views.addbooks, name='addbooks'),re_path('delbooks/(\d+)', views.delbooks),re_path('editbooks/(\d+)', views.editbooks)
]

  view.py(视图函数)

#为Book这个模型创建forms,为了渲染数据和校验使用,所以这个类的字段必须和模型类有个逻辑上的关系
class BookForm(forms.Form):    title=forms.CharField(max_length=32)    price= forms.DecimalField(max_digits=5,decimal_places=2)    pub_date = forms.DateField()    state=forms.ChoiceField(choices=((1,'已出版'),(2,'未出版')))          #选择项,用的最多    publish=forms.ModelChoiceField(models.Publish.objects.all())         #一对多    authors=forms.ModelMultipleChoiceField(models.Author.objects.all())  #多对多
  #对于publish和author这两个一对多和多对多的字段也不用考虑那么多直接用formChoice字段,然后把所有的对象取出来赋值到里面就行

#查看书籍def books(request):booklist = models.Book.objects.all()return render(request, 'books.html', {'booklist': booklist})

#添加书籍
def addbooks(request):    # 通过form/ModelForm以及校验标签渲染字段以及输入框    if request.method == 'POST':        form = Bookform(request.POST)        if form.is_valid():            form.save()            return redirect('/books/')        else:            return render(request, 'addbooks.html', {'form': form})    else:        # form=BookForm()   #form组件形式,根据字段选择不同的字段类型        return render(request, 'addbooks.html', {'form': form})

#编辑书籍
def editbooks(request, editbook_id):    editbook=models.Book.objects.filter(pk=editbook_id).first()    if request.method == 'POST':        form=BookForm(request.POST)        if form.is_valid():            form.save()            return redirect('/books/')        else:            return render(request,'editbooks.html',{'form':form})    else:        form=BookForm(edit_book)        return render(request,'editbooks.html',{'form':form})

转载于:https://www.cnblogs.com/tjp40922/p/10279933.html

关于form组件的补充-------formChoice相关推荐

  1. Web框架之Django_08 重要组件(form组件、cookie和session组件)

    阅读目录 一.form组件 二.cookie与session Django中操作Cookie 摘要: form组件 cookie组件 session组件 一.form组件 form介绍 我们之前在ht ...

  2. django12:form 组件/渲染标签/数据校验/钩子函数/

    基本用法 from django import forms# 自己写一个类 class RegForm(forms.Form):username= forms.CharField(min_length ...

  3. python---django中form组件(1)简单使用和字段了解

    Django中的Form组件功能: 1.对用户请求的验证 2.生成html代码 Form使用:对用户请求进行验证 前端代码: <form action="/f1.html" ...

  4. Django中Form组件的使用

    Form介绍 HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入 ...

  5. Django之Form组件介绍

    --------------------------------------前言------------------------------------ 在进入正题之前,想多说两句; 当我们开始学习一 ...

  6. django框架之form组件

    内容回顾: 1. 内容回顾     1. 复习JSON         1. JSON是什么?             一种数据格式,和语言无关的数据格式.         2. Python里面转换 ...

  7. Python之路--Django--form组件与model form组件

    一.form组件介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验 ...

  8. Django之Form组件

    一.Form组件介绍 1.Form组件可以做的几件事情 1.用户请求数据验证 2.自动生成错误信息 3.打包用户提交的正确信息 4.如果其中有一个错误了,其他的正确这,保留上次输入的内容 5.自动创建 ...

  9. Form 组件动态绑定数据

    1.Form 组件的作用: a.对用户提交的数据进行验证(form表单/ajax) b.保留用户上次输入的信息 c.可以生成html标签(input表单类的标签) 2..由于form组件中每个字段都是 ...

最新文章

  1. Strusts2 高危漏洞又来了,老项目自查起来!
  2. 在SAP中进行黏贴时必须要把之前的数据删掉后才能黏贴,不能直接使用黏贴来覆盖之前的数据,这个怎麼解?
  3. JS template string 神奇术
  4. 关于Android回调的理解
  5. 砥志研思SVM(四) 序列最小最优化算法(SMO)论文翻译
  6. PAT 1003 Sharing (25)
  7. 讲述一个自学七年Python编程的码农人生
  8. 关于码云的一些基本知识_一些关于 CPU 的基本知识
  9. 张小龙向来痴,微信从此醉,复盘8年,2大初心驱动至今 | 2019实录
  10. 力扣题目系列:746. 使用最小花费爬楼梯 -- 一道动态规划入门题
  11. openssl ca文档翻译
  12. python数学实验与建模百度云_Python数学实验与建模
  13. Proteus —— 电路仿真软件
  14. 数据库设计案例(1)
  15. 设置电脑 保护视力 还有桌面默认颜色
  16. Fully Convolutional Cross-Scale-Flows for Image-based Defect Detection
  17. 增量Lint检测实现原理
  18. unity 摄像头跟着鼠标移动_unity第三视角移动,摄像机跟随
  19. position中absolute和fixed的区别
  20. 小写数字与大写数字转换

热门文章

  1. 《算法竞赛入门经典》习题3-1 得分(Score,ACM、ICPC Seoul 2005,UVa1585)
  2. 【Qt】2D绘图之绘制图片
  3. 【MFC】创建第一个应用程序
  4. 【STM32】FreeRTOS中断示例
  5. 【Linux系统编程】进程间通信--消息队列
  6. git url地址无效_如何同步多个 git 远程仓库
  7. python字典进行大写转化_python之字典的增删改查
  8. group by 将null放到其他_为什么我不建议你用去 “ ! = null quot; 做判空?
  9. 记录x86调试命令总结
  10. tomcat 4.0头文件及maven导出问题万能build模板