Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.py中配置即可,不用更改models.py中的代码,丰富的API极大的方便了使用。本节的代码:(Django 1.6, Python 2.7 测试环境) 大家可以按照我的步骤来开始做: django-admin.py startproject learn_models # 新建一个项目 cd learn_models # 进入到该项目的文件夹 django-admin.py startapp people # 新建一个 people 应用(app) 补充:新建app也可以用 python manage.py startapp people, 需要指出的是,django-admin.py 是安装Django后多出的一个命令,并不是指一个 django-admin.py 脚本在当前目录下。 那么project和app什么关系呢,一个项目一般包含多个应用,一个应用也可以用在多个项目中。 将我们新建的应用(people)添加到 settings.py 中的 INSTALLED_APPS中,也就是告诉Django有这么一个应用。 INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'people', ) 我们打开 people/models.py 文件,修改其中的代码如下: from django.db import models class Person(models.Model): name = models.CharField(max_length=30) age = models.IntegerField() 我们新建了一个Person类,继承自models.Model, 一个人有姓名和年龄。这里用到了两种Field,更多Field类型可以参考教程最后的链接。 我们来同步一下数据库(我们使用默认的数据库 SQLite3,无需配置) python manage.py syncdb # 进入 manage.py 所在的那个文件夹下输入这个命令 注意:Django 1.7 及以上的版本需要用以下命令 python manage.py makemigrations python manage.py migrate 我们会看到,Django生成了一系列的表,也生成了我们新建的people_person这个表,那么如何使用这个表呢? Django提供了丰富的API, 下面演示如何使用它。 $ python manage.py shell >>> from people.models import Person >>> Person.objects.create(name="WeizhongTu", age=24) <Person: Person object> >>> 我们新建了一个用户WeizhongTu 那么如何从数据库是查询到它呢? >>> Person.objects.get(name="WeizhongTu") <Person: Person object> >>> 我们用了一个 .objects.get() 方法查询出来符合条件的对象,但是大家注意到了没有,查询结果中显示<Person: Person object>,这里并没有显示出与WeizhongTu的相关信息,如果用户多了就无法知道查询出来的到底是谁,查询结果是否正确,我们重新修改一下 people/models.py name 和 age 等字段中不能有 __(双下划线,因为在Django QuerySet API中有特殊含义(用于关系,包含,不区分大小写,以什么开头或结尾,日期的大于小于,正则等) 也不能有Python中的关键字,name 是合法的,student_name 也合法,但是student__name不合法,try, class, continue 也不合法,因为它是Python的关键字( import keyword; print(keyword.kwlist) 可以打出所有的关键字) from django.db import models class Person(models.Model): name = models.CharField(max_length=30) age = models.IntegerField() def __unicode__(self): # 在Python3中使用 def __str__(self) return self.name 按CTRL + C退出当前的Python shell, 重复上面的操作,我们就可以看到: 新建一个对象的方法有以下几种:
获取对象有以下方法:
参考文档: Django models 官方教程: https://docs./en/dev/topics/db/models/ Fields相关官方文档:https://docs./en/dev/ref/models/fields/ |
|