利用Django提供的ModelForm增删改数据
上一篇我们写了Django基于类如何增删改数据的方法,方法虽然简单,但新手可能对其原理不是很清楚,那么我们这次就用Django提供的ModelForm方法来实现增删改数据,这是一种基于现有模型的增删改方法。
一个简单的例子加以说明,前提是你已经具备Django创建项目应用的基本知识:
01.首先创建一个简单的模型,模型只有三个文本字段,标题title, 内容text , 添加日期date_added,如下:
# models.py from django.db import models
from django.utils import timezone class Article(models.Model):
title = models.CharField('标题', max_length=100)
text = models.TextField('内容')
date_added = models.DateTimeField(default=timezone.now) def __str__(self):
return self.title
创建完模型别忘了生成数据库,makemigrations方法(生成迁移文件),migrate(迁移到数据库) 。
02.在项目中创建一个form.py的文件,我这里的项目名称是app1,在其中创建继承一个ModelForm的表单类ArticleForm,他的子类中包含很多内置的方法,我都都可以对其覆盖,有兴趣的同学可以看官方文档,讲的非常详细。
文档地址:https://docs.djangoproject.com/zh-hans/2.1/topics/forms/modelforms/#django.forms.ModelForm,
# form.py from django.forms import ModelForm
from .models import Article class ArticleForm(ModelForm): # 继承ModelForm类
class Meta:
model = Article # 具体要操作那个模型
fields = ['title', 'text', 'date_added'] # 允许编辑的字段
03.创建我们视图函数,开始增删改
# views.py from django.shortcuts import render, redirect
from .models import Article
from .form import ArticleForm def articles(request):
# 查询列表页面,获取Article的所有信息
articles = Article.objects.all()
return render(request, 'app1/articles.html', {'articles':articles})
# 与其对应的url,在应用中的urls.py中设置
path('article/', views.articles, name='article'),
# 添加页面
def new_article(request):
# 如果不是POST方法访问
if request.method != 'POST':
# 创建一个空表单在页面显示
form = ArticleForm()
else:
# 否则为POST方式
# request.POST方法,将会获取到表单中我们输入的数据
new_article = ArticleForm(request.POST)
# 验证其合法性,使用is_valid()方法
if new_article.is_valid():
# 验证通过,使用save()方法保存数据
new_article.save()
# 保存成功,使用redirect()跳转到指定页面
return redirect('app1:article')
return render(request, 'app1/new_article.html', {'form':form})
# 编辑修改页面
def edit_article(request, article_id):
# 查询到指定的数据
article = Article.objects.get(id=article_id)
if request.method != 'POST':
# 如果不是post,创建一个表单,并用instance=article当前数据填充表单
form = ArticleForm(instance=article)
else:
# 如果是post,instance=article当前数据填充表单,并用data=request.POST获取到表单里的内容
form = ArticleForm(instance=article, data=request.POST)
form.save() # 保存
if form.is_valid(): # 验证
return redirect('app1:article') # 成功跳转
return render(request, 'app1/edit_article.html', {'form':form,'article':article})
# 删除页面
def del_article(request, article_id):
article = Article.objects.get(id=article_id)
if request.method == 'POST':
article.delete()
return redirect('app1:article')
return render(request, 'app1/del_article.html', {'article': article})
05.设置所有视图的url
# 列表
path('article/', views.articles, name='article'),
# 添加
path('new_article/', views.new_article, name='new_article'),
# 修改
path('edit_article/<int:article_id>/', views.edit_article, name='edit_article'),
# 删除
path('del_article/<int:article_id>/', views.del_article, name='del_article'),
06.静态页面调用
# articles.html
<a href="{% url 'app1:new_article' %}">添加</a>
{% for article in articles %}
<h1>{{ article.title }}</h1>
<p>{{ article.text }}</p>
<a href="{% url 'app1:edit_article' article.id %}">修改</a>
<a href="{% url 'app1:del_article' article.id %}">删除</a>
{% endfor %}
# new_article.html
<form action="{% url 'app1:new_article' %}" method="post">
{% csrf_token %}
{{ form.as_ul }}
<input type="submit" value="提交">
</form>
07.其他两个修改和删除页面的模板中调用方法与new_article.html中的方法一样,只需要更换action中的url即可。
创作不易,我会持续分享关于Django的相关知识,有兴趣的朋友可以关注本人微信公众号:幸福关中, 如果您觉得不错的话,打赏以下小编,小编会更有动力分享更多关于Django方面的知识,欢迎大家加小编微信交流Django知识,备注Django,小编微信:xingfuguanzhong。
利用Django提供的ModelForm增删改数据的更多相关文章
- Django基于类的增删改查,简单逻辑都不用写
Django是Python中一个非常牛逼的web框架,他帮我们做了很多事,里边也提前封装了很多牛逼的功能,用起来简直不要太爽,在写网站的过程中,增删改查这几个基本的功能我们是经常会用到,Django把 ...
- Android(java)学习笔记193:利用谷歌API对数据库增删改查(推荐使用)
接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1.首先项目图: 2.这里的布局文件activity_main.xml: <LinearLayout xmlns:android ...
- C#利用WinForm调用WebServices实现增删改查
实习导师要求做一个项目,用Winform调用WebServices实现增删改查的功能.写下这篇博客,当做是这个项目的总结.如果您有什么建议,可以给我留言.欢迎指正. 1.首先,我接到这个项目的时候,根 ...
- vue实战(一):利用vue与ajax实现增删改查
vue实战(一):利用vue与ajax实现增删改查: <%@ page pageEncoding="UTF-8" language="java" %> ...
- Android(java)学习笔记136:利用谷歌API对数据库增删改查(推荐使用)
接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1. 首先项目图: 2. 这里的布局文件activity_main.xml: <LinearLayout xmlns:andro ...
- Mysq基础l数据库管理、表管理、增删改数据整理
一. 数据库管理: 创建数据库: create database(自定义) 查询所有数据库: show databases;(查询所有数据库) show create database ( ...
- python入门23 pymssql模块(python连接sql server增删改数据 )
增删改数据必须connect.commit()才会生效 回滚函数 connect.rollback() 连接数据库 ''' dinghanhua sql server增删改 ''' import py ...
- Python学习---django之ORM的增删改查180125
模型常用的字段类型参数 <1> CharField #字符串字段, 用于较短的字符串. #CharField 要求必须有一个参数 maxlength, 用于从数 ...
- django -- ORM实现作者增删改查
前戏 前面我们已经实现了出版社的增删改查,书的增删改查,书和出版社的对应关系.现在来写一下作者的增删改查和书的对应关系,那书和作者有什么关系呢?一个作者可以写多本书,一本书可以有多个作者,所以书和作者 ...
随机推荐
- windows下apache服务器的下载,安装,配置
1.进行apache官网->Download->Files for Microsoft Windows->ApacheHaus,然后选择合适的版本下载 2.将下载下来的压缩包解压到合 ...
- Seven-segment Display 贪心选择,快速判断能否有解
https://csacademy.com/contest/round-39/task/seven-segment-display/ 可以知道,只有1是无解 而且肯定是选出来的位数约小越好. 位数 = ...
- UVALive 7500 Boxes and Balls 2015EC final 签到题 二分
分析题目后,得到要求的是最接近n的一个数,并且这个数字能写成1+2+3+....+x = ans这种形式. 要求的是最大的值. 这题就直接二分去做吧.二分出一个f(mid)<=n的最大值. 最后 ...
- Zipkin — 微服务链路跟踪.
一.Zipkin 介绍 Zipkin 是什么? Zipkin的官方介绍:https://zipkin.apache.org/ Zipkin是一款开源的分布式实时数据追踪系统(Distributed ...
- JavaFX常用汇总
1. 描述备注 1.1 参考教程 博客 易百教程 JavaFX中国 1.5 安装 a). 在线安装e(fx)clipse插件 b). 下载安装SceneBuilder c). eclipse重启以后, ...
- 《从0到1学习Flink》—— Flink 写入数据到 ElasticSearch
前言 前面 FLink 的文章中我们已经介绍了说 Flink 已经有很多自带的 Connector. 1.<从0到1学习Flink>-- Data Source 介绍 2.<从0到1 ...
- Java实例学习——企业进销存管理系统(3)
Java实例学习--企业进销存管理系统(3) (本实例为书上实例,我所记录的是我的学习过程) 开始时间:2月12日 完成时间:暂未完成 2月16日-公共类(Item公共类,数据模型公共类,Dao公共类 ...
- JDK工具
在之前的教程中,我曾介绍过 这些工具.现在,我向大家介绍其中最重要的5个工具. 1.javap javap是一个Java类文件反汇编程序,可以查看Java编译器生成的字节码,是分析代码的一个好工具.让 ...
- 动态页面技术----EL技术、JSTL技术,javaEE的开发模式
1 EL技术 1.1 EL 表达式 EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写, EL出现的目的是要替代jsp页面中脚本的编写,就是简化java代码. ...
- Spring Cloud 服务发现和消费
服务的发现和消费 有了服务中心和服务提供者,下面我们来实现一个服务的消费者: 服务消费者主要完成两个任务——服务的发现和服务的消费,服务发现的任务是由Eureka客户端完成,而服务消费的任务是由Rib ...