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. 1.1 NCE21 Daniel Mendoza

    1.text translation Two hundred years ago, boxing matches were very popular in England. At that time/ ...

  2. 做为一个Python程序员的基本素养

    今天在学习的过程中,明白了一些不是Python标准所必须要做的事情,二是做为一个合格的Python程序员应该所遵从的一些规范 分享给大家,有不足的地方请大家指正,此下是我学习的一点心得: 1.在给变量 ...

  3. webApi 验证basic-authentication认证的资源的各种语言的实现

    HTTP Basic authentication (BA) 是一个基于http请求的,简单验证.详细资料:https://en.wikipedia.org/wiki/Basic_access_aut ...

  4. JavaScript 函数闭包的应用

    一.模仿块级作用域 JavaScript 没有块级作用域的概念,那么可以模拟像java中将很多变量私有化封装起来,保护数据,防止数据泄漏,封装细节,这样安全性和可控性更高 function box(c ...

  5. WPF: 自动设置Owner的ShowDialog 适用于MVVM

    原文:WPF: 自动设置Owner的ShowDialog 适用于MVVM 原文地址:http://www.mgenware.com/blog/?p=339 WPF中的Windows的ShowDialo ...

  6. ASP.NET Core使用HttpClient的同步和异步请求

    using System; using System.Collections.Generic; using System.Collections.Specialized; using System.I ...

  7. 分享数百个 HT 工业互联网 2D 3D 可视化应用案例

    过去的 2018 年,我们认为是国内工业互联网可视化的元年,图扑软件作为在工业可视化领域的重度参与者,一线见证了众多 HTML5/Web 化.2D/3D 化的项目在工业界应用落地,我们觉得有必要在此分 ...

  8. 乡下人重拾MVC——@RenderBody @RenderSection @Html.Partial @Html.Action @Html.RenderPartial @Html.RenderAction

    1.   @RenderBody()  代表:是一个占位符,是留给子页面的位置,子页面使用这个模版,子页面中的内容会被放到@RenderBody的位置.合并后当作一个整体加载 2.   @Render ...

  9. 小程序——返回上个页面触发事件(onUnload)

    //页面销毁前--上传被提交的数据 onUnload:function(){ var _this=this; let updateStatus = wx.getStorageSync('UpdateS ...

  10. CodeForces Round #552 Div.3

    A. Restoring Three Numbers 代码: #include <bits/stdc++.h> using namespace std; ]; int a, b, c; i ...