要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查。本篇仅带领大家进行简单的建表、查询和删除,因为model的重要性所以后面几篇都会围绕ORM慢慢深入。

本篇导论:

一、ORM

映射关系:

表名 <-------> 类名

字段 <-------> 属性     

表记录 <------->类实例对象


二、创建表(建立模型)

1、创建表的代码写在项目下的models文件中

1)比如我们创建一个图书表,建立如下:

from django.db import models

# Create your models here.

class Book(models.Model):
nid = models.AutoField(primary_key=True) #AutoField有序整形 IntegerField整形
title = models.CharField(max_length=32) #CharField字符
author = models.CharField(max_length=32)
publishDate = models.DateField() #DateField日期类型
price = models.DecimalField(max_digits=5, decimal_places=2) #DecimalField浮点型也可以用FloatField

类名就是表名,属性就是字段。继承django提供给我们的用于做转换的models.Model才能将我们写的类转化为数据库

定义好模型之后,你需要告诉Django 使用这些模型。你要做的就是修改配置文件。

2)字段常用参数

(1)null

如果为True,Django 将用NULL 来在数据库中存储空值。 默认值是 False.

(1)blank

如果为True,该字段允许不填。默认为False。
要注意,这与 null 不同。null纯粹是数据库范畴的,而 blank 是数据验证范畴的。
如果一个字段的blank=True,表单的验证将允许该字段是空值。如果字段的blank=False,该字段就是必填的。 (2)default 字段的默认值。可以是一个值或者可调用对象。如果可调用 ,每有新对象被创建它都会被调用。 (3)primary_key 如果为True,那么这个字段就是模型的主键。如果你没有指定任何一个字段的primary_key=True,
Django 就会自动添加一个IntegerField字段做为主键,所以除非你想覆盖默认的主键行为,
否则没必要设置任何一个字段的primary_key=True。 (4)unique 如果该值设置为 True, 这个数据字段的值在整张表中必须是唯一的 (5)choices
由二元组组成的一个可迭代对象(例如,列表或元组),用来给字段提供选择项。 如果设置了choices ,默认的表单将是一个选择框而不是标准的文本框,而且这个选择框的选项就是choices 中的选项。 这是一个关于 choices 列表的例子: YEAR_IN_SCHOOL_CHOICES = (
('FR', 'Freshman'),
('SO', 'Sophomore'),
('JR', 'Junior'),
('SR', 'Senior'),
('GR', 'Graduate'),
)
每个元组中的第一个元素,是存储在数据库中的值;第二个元素是在管理界面或 ModelChoiceField 中用作显示的内容。 在一个给定的 model 类的实例中,想得到某个 choices 字段的显示值,就调用 get_FOO_display 方法(这里的 FOO 就是 choices 字段的名称 )。例如: from django.db import models class Person(models.Model):
SHIRT_SIZES = (
('S', 'Small'),
('M', 'Medium'),
('L', 'Large'),
)
name = models.CharField(max_length=60)
shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES) >>> p = Person(name="Fred Flintstone", shirt_size="L")
>>> p.save()
>>> p.shirt_size
'L'
>>> p.get_shirt_size_display()
'Large'

2、修改配置文件setting

1)django默认使用的是sqlite3数据库,我们使用的是mysql数据库所以需要修改配置

原先配置(将这些配置注释掉)

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}

重新配置

DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.mysql',

        'NAME': 'blog',    #你的数据库名称 数据库需要自己提前建好

        'USER': 'root',   #你的数据库用户名

        'PASSWORD': '', #你的数据库密码

        'HOST': '', #你的数据库主机,留空默认为localhost

        'PORT': '', #你的数据库端口

    }
}

3、创建表命令

1)同步更改数据库表或字段

老版本:
python manage.py syncdb Django 1.7.1 及以上的版本需要用以下命令
python manage.py makemigrations
python manage.py migrate

2)运行python manage.py makemigrations后我们应用下的migrations文件夹里会自动生成一个文件,是将我们写的类进一步转化:

# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2017-10-25 03:30
from __future__ import unicode_literals from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [
] operations = [
migrations.CreateModel(
name='Book',
fields=[
('nid', models.AutoField(primary_key=True, serialize=False)),
('title', models.CharField(max_length=32)),
('author', models.CharField(max_length=32)),
('publishDate', models.DateField()),
('price', models.DecimalField(decimal_places=2, max_digits=5)),
],
),
]

3)运行python manage.py migrate后表就插入到我们的数据库中了

4)注意:

如果我们的python是3.x版本运行上面两条会报错

No module named "MySQLdb"

在3.x走数据库用的是pymysql模块所以我们需要告诉django用pymysql

在应用下的__init__.py文件里添加代码

import pymysql

pymysql.install_as_MySQLdb()

运行后在数据库里查看:

会发现django给我们创建了很多表 我们自己创建的Book表会被自动改名为 应用名_book 这样避免了我们在不同的应用中有相同的表,其他的表后面用到时会一一介绍。


三、查看表

1、先在视图函数view中将数据取出来

from app01 import models    #app01是应用名

def index(request):
# 从数据库取出所有书籍对象
bookList=models.Book.objects.all() # [bookObj1,.....]
return render(request,"index.html",{"bookList":bookList})

查询相关

<1> all():    查询所有结果
<2> filter(): 查询所给筛选条件相匹配的对象

2、在template模版中接收

{% for book_obj in bookList %}
<tr>
<td>{{ book_obj.nid }}</td>
<td>{{ book_obj.title }}</td>
<td>{{ book_obj.author }}</td>
<td>{{ book_obj.publishDate|date:"Y-m-d" }}</td>
<td>{{ book_obj.price }}</td>
</tr>
{% endfor %}

四、删除

删除方法就是 delete()。它运行时立即删除对象而不返回任何值。

比如我们给表中添加一个删除按钮来实现点击按钮后数据库每条记录的删除

1、template模版

{% for book_obj in bookList %}
<tr>
<td>{{ book_obj.nid }}</td>
<td>{{ book_obj.title }}</td>
<td>{{ book_obj.author }}</td>
<td>{{ book_obj.publishDate|date:"Y-m-d" }}</td>
<td>{{ book_obj.price }}</td>
<td>
<a href="/del/{{ book_obj.nid }}"><button class="btn btn-danger">删除</button></a>
</td>
</tr>
{% endfor %}

2、url 分发

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
url(r'^del/(\d+)', views.delBook),
]

3、视图函数view实现删除

def delBook(request,id):
models.Book.objects.filter(nid=id).delete()
return redirect("/index/")

64、django之模型层(model)--建表、查询、删除基础的更多相关文章

  1. Django模型层:多表查询

    一 创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一的关 ...

  2. Django的模型层(2)---多表操作

    多表操作 创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对 ...

  3. Django之模型层(多表操作)

    一.创建模型 1,一对多关系 一本书只有一个出版社,一个出版社可以出版多本书,从而书与出版社之间就构成一对多关系,书是‘多’的一方,出版社是‘一’的一方,我们在建立模型的时候,把外键写在‘多’的一方, ...

  4. Django框架之第六篇(模型层)--单表查询和必知必会13条、单表查询之双下划线、Django ORM常用字段和参数、关系字段

    单表查询 补充一个知识点:在models.py建表是 create_time = models.DateField() 关键字参数: 1.auto_now:每次操作数据,都会自动刷新当前操作的时间 2 ...

  5. 模型层字段-多表查询-神奇的双下划线查询-F,Q查询

    Django ORM中常用的字段和参数 常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. In ...

  6. Django之模型层(单表操作)

    一.ORM简介 MVC和MTV框架中包含一个重要部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库. ORM是‘对象-关系- ...

  7. django之模型层(model)--建表、查询、删除基础

    要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...

  8. 65、django之模型层(model)--添加、单表查询、修改基础

    上篇带大家简单做了一下图书表的创建.简单的查看和删除,今天会先简单介绍添加和修改,因为添加和修改与删除一样都很简单,本篇会相对多介绍一点单表查询,大家都知道数据库中查询是最重要的一部分,毕竟无论是修改 ...

  9. django之模型层(model)--添加、单表查询、修改基础

    上篇带大家简单做了一下图书表的创建.简单的查看和删除,今天会先简单介绍添加和修改,因为添加和修改与删除一样都很简单,本篇会相对多介绍一点单表查询,大家都知道数据库中查询是最重要的一部分,毕竟无论是修改 ...

随机推荐

  1. 201521123004《Java程序设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 答:思维导图如下: Java中使用try-catch语法处理异常: try { 可能产生异常的代码段 }catch ...

  2. 201521123048 《Java程序设计》第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...

  3. JS中有关分支结构、循环结构以及函数应用的一些简单练习

    案例一:搬桌子    年龄大于七岁男女都可以搬桌子,年龄小于七岁大于五岁的男生可以搬桌子: var num =parseInt(prompt("请输入你的年龄")) var sex ...

  4. 定位页面元素之xpath详解以及定位不到测试元素的常见问题

    一.定位元素的方法 id:首选的识别属性,W3C标准推荐为页面每一个元素设置一个独一无二的ID属性, 如果没有且很难找到唯一属性,解决方法:(1)找开发把id或者name加上.如果不行,解决思路可以是 ...

  5. javaSE(九)之泛型(Generics)

    前言 这几天分享了怎么搭建集群,这一篇给大家介绍的是泛型,在我们的很多java底层的源代码都是有很多复杂的泛型的!那什么是泛型呢? 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是 ...

  6. Git的使用详解

    起步 关于版本控制 Git 简史 Git 基础 安装 Git 初次运行 Git 前的配置 获取帮助 小结 Git 基础 取得项目的 Git 仓库 记录每次更新到仓库 查看提交历史 撤消操作 远程仓库的 ...

  7. Download the Hibernate Tools

    首先去官网上下载最新版本的Hibernate Tools JBoss Tools 4.5.0.Final Requirements: Java 8 and Eclipse Oxygen 4.7 有 4 ...

  8. Sublime Text 3 全程详细图文原创教程

    Sublime Text 3 全程详细图文原创教程(持续更新中...) 一. 前言 使用Sublime Text 也有几个年头了,版本也从2升级到3了,但犹如寒天饮冰水,冷暖尽自知.最初也是不知道从何 ...

  9. HDU2688-Rotate

    Recently yifenfei face such a problem that give you millions of positive integers,tell how many pair ...

  10. 翻译 | 使用A-Frame打造WebVR版《我的世界》

    原文地址:Minecraft in WebVR with HTML Using A-Frame 原文作者:Kevin Ngo 译者:Felix 校对:阿希 我是 Kevin Ngo,一名就职于 Moz ...