利用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实现作者增删改查
前戏 前面我们已经实现了出版社的增删改查,书的增删改查,书和出版社的对应关系.现在来写一下作者的增删改查和书的对应关系,那书和作者有什么关系呢?一个作者可以写多本书,一本书可以有多个作者,所以书和作者 ...
随机推荐
- vbox和宿主机共享文件夹
首先,查看vbox安装的ubuntu是否支持vboxsf模块 sudo modprobe vboxsf dmesg | grep vboxsf 如果没有安装,需要安装vboxsf模块:(如果安装了请跳 ...
- 牛客网Java刷题知识点之全局变量(又称成员变量,分为类变量和实例变量)、局部变量、静态变量(又称为类变量)
不多说,直接上干货! 定义类其实就是在定义类中的成员.成员:成员变量<-->属性,成员函数<-->行为. 局部变量在方法内部声明,并且只能在方法内部使用,在外层的方法被调用时被 ...
- java编程如何实现多条2017-01-16 22:28:11.0这样的时间数据,转换成Date类型Mon Jan 16 22:28:11 CST 2017这样的时间数据
不多说,直接上干货! package zhouls.bigdata.DataFeatureSelection.sim; import java.text.ParseException; import ...
- Mercurial(HG) Windows+Eclipse安装、配置、使用
Mercurial(HG) Windows客户端安装 Mercurial(HG): http://mercurial.selenic.com/ Windows客户端下载:http://mercuria ...
- mysql 链接时报错:1251-Client does not support authentication protocol requested by server
一 原因是mysql服务器要求的认证插件版本与客户端不一致造成的. 二 由于我是最新的mysql和破解版的navicat,那么就是mysql太高级了. 解决方法有两个,我毫不犹豫的选择mysql降级. ...
- asp.net后台调用前台js代码
为了通过ajax异步获取数据,我通过使用jquery的$(function{})方法,在页面加载时发送ajax请求,获取相关的数据.但是遇到了一个问题,当我发送的ajax请求需要根据传过来的URL参数 ...
- vscode 插件todo-highlight
简介 Highlight TODO,FIXME or any annotations within your code. 资源 https://marketplace.visualstudio.com ...
- python_3 :用python微信跳一跳
[学习使用他人代码] 2018年01月21日 19:29:02 独行侠的守望 阅读数:319更多 个人分类: Python 编辑 版权声明:本文为博主原创文章,转载请注明文章链接. https://b ...
- Magento 中一个订单的“生命历程”
当我们在网上愉快的买买买的时候, 你知道在这些屏幕“背后”正在进行着什么吗? 1. 当一个产品被加入到购物车后, 实际上发生了什么? 当第一个产品被加入到购物车, 系统首先会生成一个 quote (q ...
- concurrent.futures模块与协程
concurrent.futures —Launching parallel tasks concurrent.futures模块同时提供了进程池和线程池,它是将来的使用趋势,同样我们之前学习 ...