gender = forms.ChoiceField(choices=((1, '男'), (2, '女'), (3, '其他')))  # 与sql没关系
publish = forms.ChoiceField(choices=Publish.objects.all().values_list('pk', 'name'))
publish = forms.ModelChoiceField(queryset=Publish.objects.all(), label='出版社')
authors = forms.ModelMultipleChoiceField(queryset=Author.objects.all(), label='作者')

-------->forms在post提交数据时,可以验证并将数据返回前端,

      get请求时,如何将数据返回前端?

ModelForm

 from django.forms import ModelForm
from django.forms import widgets as wid # 因为重名,所以起个别名!
class BookForm(ModelForm):
class Meta:
model = Book # 关联的哪个模型
fields = "__all__" # 对所有字段转换  ["title",...]
exclude = None # 排除的字段 # 自定义在前端显示的名字
labels = {"title": "书籍名称", "price": "价格", "date": "日期", "publish": "出版社", "authors": "作者"}
widgets = {
'title': wid.TextInput(attrs={'class': 'form-control'}),
'price': wid.TextInput(attrs={'class': 'form-control'}),
'date': wid.TextInput(attrs={'class': 'form-control', 'type': 'date'}),
'publish': wid.Select(attrs={'class': 'form-control'}),
'authors': wid.SelectMultiple(attrs={'class': 'form-control'})
}
error_messages = {
'title': {'required': '不能为空'},
'price': {'required': '不能为空'},
'date': {'required': '不能为空', 'invalid': '格式错误'},
'publish': {'required': '不能为空'},
'authors': {'required': '不能为空'},
}
 #  editdisplay
edit_book = Book.objects.filter(pk=edit_book_id).first()
# form = BookForm(initial={"title": edit_book.title, "price": edit_book.price, "date": edit_book.date,
# "publish": edit_book.publish, 'authors': edit_book.authors.all()})
form = BookForm(initial=edit_book)
return render(request, "edit.html", locals())
 # create、update
form = BookForm(request.POST) # create
if form.is_valid():
form.save() # form.model.objects.create(request.POST) form = BookForm(request.POST,instance=edit_book) # update
if form.is_valid():
form.save() # edit_book.update(request.POST)
 # display
{% for book in book_list %}
<tr>
<td>{{ book.title }}</td>
<td>{{ book.price }}</td>
<td>{{ book.date|date:"Y-m-d" }}</td>
<td>{{ book.publish.name }}</td>
<td>{{ book.authors.all }}</td>
<td><a href="/book/edit/{{book.pk}}"><button>编辑</button></a></td>
</tr>
{% endfor %}

django - 总结 - ModelForm的更多相关文章

  1. Django中ModelForm应用

    Django中ModelForm的应用 在传统中Form提交的POST的数据在服务器端获取时将不得不一一获取并验证数据的可靠性,但是使用django提供的Form时可简化该过程并提供相应的验证,同时D ...

  2. Django的ModelForm

    基于django.forms.ModelForm:与模型类绑定的Form 先定义一个ModelForm类,继承ModelForm类 from django.forms import ModelForm ...

  3. Django中Model-Form验证

    Django中Model-Form验证 class UserType(models.Model): caption=models.CharField(max_length=32) class User ...

  4. django中ModelForm save方法 以及快速生成空表单或包含数据的表单 包含错误信息

    django中ModelForm学习系列一~save方法 Model代码 from django.db import models # Create your models here. class P ...

  5. Django 四——ModelForm用法

    内容概要: 1.新增数据库表中数据 2.更新数据库表中数据 Django的ModelForm Django中内置了Form和Model两个类,有时候页面的表单form类与Model类是一一对应,因此分 ...

  6. Django(十四)课程机构列表页数据展示,Django的modelform,关于urls的重新分发

    关于urls的重新分发: 如果所有url都配置在根路径的urls.py里,会特别多,而且也不易于修改,Django框架里支持urls的重新分发: 1.在根路径的urls配置上: PS:namespac ...

  7. 【Django】--ModelForm组件

    ModelForm a.class Meta: model,#对应Model的 fields=None,#字段 exclude=None,#排除字段 labels=None,#提示信息 help_te ...

  8. Django的ModelForm组件

    创建类 from django.forms import ModelForm from django.forms import widgets as wd from app01 import mode ...

  9. Django之modelform组件

    一.简介与基本使用 简介:django中的modelform组件同时具有model和form作用,但是耦合度比较高,当项目需要拆分时候就比较困难了,所以在使用modelform时候需要先考虑项目的扩展 ...

  10. 【django之modelform】

    一.什么是modelform ModelForm顾名思义就Form和Django的Model数据库模型结合体,可以简单.方便得对数据库进行增加.编辑操作和验证标签的生成: 举例说明: 比如我们的数据库 ...

随机推荐

  1. LeetCode算法题-Maximum Depth of N-ary Tree(Java实现)

    这是悦乐书的第261次更新,第274篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第128题(顺位题号是559).给定n-ary树,找到它的最大深度.最大深度是从根节点到 ...

  2. Ubuntu下安装JDK详细教程

    Ubuntu下安装JDK详细教程 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ Ubuntu版本:Ubuntu-12.04.5-desktop-i386 ...

  3. day10-内置模块学习(一)

    今日份目录 1.模块之间的相互调用 2.代码结构的标准化 3.os模块 4.sys模块 5.collection模块 开始今日份总结 开始今日份总结 1.模块之间的相互调用 由于一些原因,总是会调用别 ...

  4. HTML60秒倒计时

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Django 之 admin管理工具

    -------------------------------------------------------------------------妄尝恶果,苦果自来. admin组件使用 Django ...

  6. 虚拟机系统安装Messenger和Server

    YCD对支持虚拟机运行Messenger和Server, 不论用哪种虚拟机安装, 请保证: 确认DirectX和Direct 3D组件已经开启 为虚拟机分配显卡计算资源 如果不满足以上条件, 虚拟机上 ...

  7. Object的所有方法

    Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象.它将返回目标对象. const object1 = { a: 1, b: 2, c: 3 }; const ...

  8. mybatis源码分析(五)------------SQL的执行过程

    在对SQL的执行过程进行分析前,先看下测试demo: /** * @author chenyk * @date 2018年8月20日 */ public class GoodsDaoTest { pr ...

  9. DAO 四个包的建立

    一.DAO 四个包的建立,降低代码之间的耦合性? 之前写代码,都是在一个包下.代码耦合性较高,不利于后期的维护. dao(代码分层?) 有利于后期的维护代码,修改方便. com.aaa.dao 存放d ...

  10. 进程初识和multiprocessing模块之Process

    一.什么是进程 进程就是运行中的程序 进程是操作系统中最小的资源分配单位 进程与进程之间的关系 : 数据隔离的 进程的id:Process id = pid pid是一个全系统唯一的对某个进程的标识, ...