- Django 基本概念
- Django - 首页
- Django - 基础
- Django - 概述
- Django - 环境
- Django - 创建项目
- Django - 应用生命周期
- Django - 创建视图
- Django - URL 映射
- Django - 首页
- Django - 模板系统
- Django - MVT
- Django - 添加主模板
- Django 管理员
- Django 管理员 - 界面
- Django 管理员 - 创建用户
- Django 管理员 - 包含模型
- Django 管理员 - 设置显示字段
- Django 管理员 - 更新对象
- Django 模型
- Django - 模型
- Django - 插入数据
- Django - 更新数据
- Django - 删除数据
- Django - 更新模型
- Django 静态文件
- Django - 添加静态文件
- Django - 添加 CSS 文件
- Django 高级
- Django - 页面未找到 (404)
- Django - 页面重定向
- Django - 发送电子邮件
- Django - 通用视图
- Django - 表单处理
- Django - 文件上传
- Django - Apache 设置
- Django - Cookie 处理
- Django - 会话
- Django - 缓存
- Django - 评论
- Django - RSS
- Django - AJAX
- Django 有用资源
- Django - 快速指南
- Django - 有用资源
- Django - 讨论
Django – 插入数据
Django 有自己的对象关系模型 (ORM),它将 Python 类与关系数据库中的表映射起来。ORM 机制有助于以面向对象的方式执行 CRUD 操作。在本章中,我们将学习插入新数据的方法。
默认情况下,Django 使用 SQLite 数据库。Django 中的模型是从“django.db.models”类继承的类。
让我们在“models.py”文件中使用以下Dreamreal 模型来学习如何在映射的表中插入数据:
from django.db import models class Dreamreal(models.Model): website = models.CharField(max_length=50) mail = models.CharField(max_length=50) name = models.CharField(max_length=50) phonenumber = models.IntegerField() class Meta: db_table = "dreamreal"
声明模型后,我们需要执行迁移:
python manage.py makemigrations python manage.py migrate
从 Shell 插入对象
Django 具有一个有用的功能,您可以使用它在 Django 项目的环境中调用 Python shell。使用manage.py脚本的 shell 命令:
python manage.py shell
在 Python 提示符前,导入 Dreamreal 模型:
>>> from myapp.models import Dreamreal
我们可以构造此类的对象并调用其 save() 方法,以便在表中添加相应的行
>>> obj = Dreamreal(website="www.polo.com", mail="[email protected]", name="sorex", phonenumber="002376970") >>> obj.save()
我们可以通过在任何 SQLite 查看器中打开数据库来确认这一点。
您还可以使用模型类的对象属性的 create() 方法插入记录。
>>> obj = Dreamreal.objects.create(website="www.polo.com", mail="[email protected]", name="sorex", phonenumber="002376970")
通过调用视图函数执行插入操作
现在让我们通过调用视图函数来执行插入操作。在views.py文件中定义addnew()函数,如下所示:
from myapp.models import Dreamreal def addnew(request): obj = Dreamreal(website="www.polo.com", mail="[email protected]", name="sorex", phonenumber="002376970") obj.save() return HttpResponse("<h2>Record Added Successfully")
我们需要将此视图注册到 URLpatterns 列表中。
from django.urls import path from . import views urlpatterns = [ path("", views.index, name="index"), path("addnew/", views.addnew, name='addnew') ]
与其像上述示例中那样使用硬编码值,不如希望从用户那里接受数据。为此,在myform.html文件中创建一个 HTML 表单。
<html> <body> <form action="../addnew/" method="post"> {% csrf_token %} <p><label for="website">WebSite: </label> <input id="website" type="text" name="website"></p> <p><label for="mail">Email: </label> <input id="mail" type="text" name="mail"></p> <p><label for="name">Name: </label> <input id="name" type="text" name="name"></p> <p><label for="phonenumber">Phone Number: </label> <input id="phonenumber" type="text" name="phonenumber"></p> <input type="submit" value="OK"> </form> </body> </html>
HTML 模板文件必须存储在 TEMPLATES 设置中定义的目录中:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR/'templates'], .. . ., ]
让我们使用 render() 函数显示表单模板:
from django.shortcuts import render from myapp.models import Dreamreal def addnew(request): if request.method == "POST": ws = request.POST['website'] mail = request.POST['mail'] nm = request.POST['name'] ph = request.POST['phonenumber'] obj = Dreamreal(website=ws, mail=mail, name=nm, phonenumber=ph) obj.save() return HttpResponse("<h2>Record Added Successfully</h2>") return render(request, "myform.html")
请注意,表单的 action 属性也设置为映射 addnew() 函数的相同 URL。因此,我们需要检查 request.method。如果是 GET 方法,则呈现空白表单。如果是 POST 方法,则解析表单数据并将其用于插入新记录。
模型表单
Django 有一个ModelForm类,它会自动呈现一个 HTML 表单,其结构与模型类的属性匹配。
我们在应用文件夹下的forms.py文件中定义了一个DreamRealForm类,它使用Dreamreal 模型作为基础。
from django import forms from .models import Dreamreal class DreamrealForm(forms.ModelForm): class Meta: model = Dreamreal fields = "__all__"
模型表单的对象在 HTML 表单上呈现。如果请求方法是 POST,则 ModelForm 类的 save() 方法会自动验证表单并保存新记录。
from .forms import DreamrealForm def addnew(request): if request.method == 'POST': form = DreamrealForm(request.POST) if form.is_valid(): form.save() return HttpResponse("<h2>Book added successfully</h2>") context={'form' : DreamrealForm} return render(request, "myform.html", context)
CreateView 类
Django 定义了一组通用视图类。CreateView类专门用于执行 INSERT 查询操作。
我们定义CreateView类的子类,并将它的template_name属性设置为我们已经创建的myform.html。
在views.py文件中添加以下代码:
from django.views.generic import CreateView class DRCreateView(CreateView): model = Dreamreal fields = "__all__" template_name = 'myform.html' success_url = '../success/'
插入成功后,浏览器将重定向到 success() 视图函数。
def success(request): return HttpResponse("<h2>Book added successfully</h2>")
上述两个视图都必须包含在urls.py文件的 URL 模式列表中。通用视图类使用它们的 as_view() 方法注册。
from django.urls import path from . import views from .views import DRCreateView urlpatterns = [ path("", views.index, name="index"), path("addnew/", views.addnew, name='addnew'), path("add/", DRCreateView.as_view(), name='add'), path("success/", views.success, name='success'), ]
在本章中,我们学习了在 Django 模型中插入数据的不同方法。