django book学习笔记——模型

1.数据库配置

打开settings.py配置文件,找到数据库配置DATABASES,例如:

DATABASES = {
    ‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘, # 使用哪个数据库引擎
        ‘NAME‘: ‘djangodb‘,                      # 数据库名称
        ‘USER‘: ‘django‘,                      # 用哪个用户连接数据库
        ‘PASSWORD‘: ‘django‘,                  # 用户密码
        ‘HOST‘: ‘localhost‘,                      # 数据库服务器监听地址
        ‘PORT‘: ‘3306‘,                      # 数据库服务器监听端口
    }
}

2.创建应用程序

python manage.py startapp books

注:系统对app有一个约定: 如果你使用了Django的数据库层(模型),你 必须创建一个django app。 模型必须存放在apps中。

3.模型定义

第一步是用Python代码来描述它们。 打开由startapp命令创建的models.py 并输入下面的内容:

from django.db import models

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

首先要注意的事是每个数据模型都是 django.db.models.Model 的子类。 它的父类 Model 包含了所有和数据库
打交道的方法,并提供了一个简洁漂亮的定义语法。每个模型相当于单个数据库表,每个属性也是这个表中的一个字段。 属性名就是字段名,它的类型例如(CharField)相当于数据库的字段类型 (例如
varchar)

4.模型安装

第一步是在 Django 项目中激活这些模型。将 app 添加到配置文件的已INSTALLED_APPS列表中即可完成此步骤。INSTALLED_APPS 告诉
Django 项目哪些 app 处于激活状态。例如:

INSTALLED_APPS = (
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.sites‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
    # Uncomment the next line to enable the admin:
    # ‘django.contrib.admin‘,
    # Uncomment the next line to enable admin documentation:
    # ‘django.contrib.admindocs‘,
    ‘debug_toolbar‘,
    ‘books‘,
)

第二步用下面的命令校验模型的有效性:

python manage.py validate

第三步模型确认没问题了,运行下面的命令来生成 CREATE TABLE 语句:

python manage.py sqlall books

注:sqlall 命令并没有在数据库中真正创建数据表,只是把SQL语句段打印出来。

第四步运行以下命令同步模型到数据库:

python manage.py syncdb

5.基本数据访问

当你使用Django modle API创建对象时Django并未将对象保存至数据库内,除非你调用save()方法:

p1 = Publisher(...)
# At this point, p1 is not saved to the database yet!
p1.save()
# Now it is.

如果需要一步完成对象的创建与存储至数据库,就使用objects.create()方法。

>>> p1 = Publisher.objects.create(name=‘Apress‘,
...     address=‘2855 Telegraph Avenue‘,
...     city=‘Berkeley‘, state_province=‘CA‘, country=‘U.S.A.‘,
...     website=‘http://www.apress.com/‘)

6.添加模块的字符串表现

当我们打印整个publisher列表时,我们没有得到想要的有用的信息:

>>> publisher_list = Publisher.objects.all()
>>> publisher_list
[<Publisher: Publisher object>, <Publisher: Publisher object>]

只需要添加一个方法 __unicode__()Publisher 对象。 __unicode__() 方法告诉Python如何实现对象的unicode表示。

from django.db import models

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()

    def __unicode__(self):
        return self.name

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()

    def __unicode__(self):
        return u‘%s %s‘ % (self.first_name, self.last_name)

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

    def __unicode__(self):
        return self.title

为了让我们的修改生效,先退出Python Shell,然后再次运行 python manage.py shell 进入。

>>> from books.models import Publisher
>>> publisher_list = Publisher.objects.all()
>>> publisher_list
[<Publisher: Apress>, <Publisher: O‘Reilly>]
时间: 2024-10-08 00:26:05

django book学习笔记——模型的相关文章

django book学习笔记——模型高级进阶

1.访问外键(Foreign Key)值 当你获取一个为ForeignKey 字段时,你会得到相关的数据模型对象. 例如: >>> b = Book.objects.get(id=50) >>> b.publisher <Publisher: Apress Publishing> >>> b.publisher.website u'http://www.apress.com/' 对于用 ForeignKey 来定义的关系来说,在关系的另一端

django+mysql学习笔记

这段时间在学习mysql+django的知识点.借此记录以下学习过程遇到的坑以及心得. 使用的工具是navicat for mysql python 2.7.12 mysql-python 1.2.3 . 首先在次目录下新建一个数据库(students_info),记下用户名,密码,端口......此数据库后续会在settings.py中进行对接. django与database对接的操作流程: 1.你得先告诉django数据库的相关信息,后续框架会自动去根据这些信息访问数据库不用你操心了. 代

python django框架学习笔记(三)--大结局

一.数据库同步操作技巧 1.认识一个目录 目录名:migatations 作用,用来存放通过makemigrations命令生成的数据库脚本.app目录下必须要有migrations目录切目录下必须要有__init__.py才能正常的使用数据库同步功能. 2.认识一张数据表(django_migrations) 表中的字段: app:app名字 name:脚本的文件名称 applied:脚本执行时间 3.数据库相关的命令 flush:清空数据库-恢复数据库到最初的状态 makemigration

Django深入学习之模型语法(model syntax)

模型是你的网站数据信息惟一的.明确的来源.它包含你所储存数据的字段定义和行为.一般地,一个模型映射着一个惟一数据库的表单(table). 所有模型都是django.db.models.Model的子类. 模型的每个属性代表着一个数据库字段 django会自动生成你所需要的数据库 使用模型 当你定义完你的数据模型,你得告诉Django你将使用它,你需要在setting.py中的INSTALLED_APPS中添加模型. 字段 一个模型最重要也是必须的部分 - 定义一系列的数据字段,字段由类属性来描述

Django深入学习之模型字段学习

字段选项 null 如果为True,Django将会在数据库中存储空值.默认是False. blank 如果为True,这个字段允许为空.默认是False. Choices 由两个元素组成的一个可以迭代选择的字段元素. db_index 如果为True,那么django-admin.py sqlindex将会生成一个create index语句. db_column 字段的数据库表单列的名称. default 字段的默认值. editable 如果False,这个字段将不会显示在admin页面或

Django Tutorial 学习笔记

实际操作了Django入门教程中的范例,对一些细节有了更清晰的掌握.感觉只看文档不动手是不行的,只看文档没法真正掌握其中要素之间的关系,看了很多遍也不行,必须动手做了才能掌握.同时,这次练习在Eclipse+PyDev环境下进行,了解了这个开发环境对Django的支持情况. Django网站提供的入门教程: https://docs.djangoproject.com/en/1.6/intro/tutorial01/ 教程中的数据库结构 Poll {question, pub_date} Cho

django book学习笔记——模板高级进阶

1.RequestContext和Context处理器 当你不想在一系例模板中都明确指定一些相同的变量时,你应该使用 RequestContext .例如: from django.template import loader, RequestContext def custom_proc(request):     "A context processor that provides 'app', 'user' and 'ip_address'."     return {     

django book学习笔记——模板

1.模板系统的基本知识 模板是一个文本,用于分离文档的表现形式和内容. 模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签). 模板通常用于产生HTML,但是Django的模板也能产生任何基于文本格式的文档. 2.如何使用模板系统 在Python代码中使用Django模板的最基本方式如下: 1).可以用原始的模板代码字符串创建一个 Template 对象, Django同样支持用指定模板文件路径的方式来创建 Template 对象; 2).调用模板对象的render方法,并

The Django Book学习笔记 06 admin

自定义字段标签 自定义一个标签, 你只需在模块中指定 verbose_name=' ' from django.db import models # Create your models here. from django.db import models class Publisher(models.Model): name = models.CharField(max_length=30) address = models.CharField(max_length=50) city = mo