码迷,mamicode.com
首页 > 其他好文 > 详细

django book学习笔记——模型

时间:2015-08-06 22:38:04      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:python django

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>]

django book学习笔记——模型

标签:python django

原文地址:http://wangyongbin.blog.51cto.com/8964308/1682393

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!