Django项目开发举例举例之创建应用模型(2)

         应用是一个Web应用程序,它完成具体的事项 —— 比如一个博客系统、一个存储公共档案的数据库或者一个简单的投票应用。

应用可以放在Python path上的任何位置。在本教程中,我们将放在与manage.py文件同级目录下,以便可以将它作为顶层模块导入,

而不是testproject的子模块。我们以创建一个投票系统为例来创建一个应用。

现在我们切换到与manage.py文件同级目录下

1.创建应用

$ python manage.py startapp myapp


我们可以看一下执行命令后增加了哪些目录文件:

$ ls -la

total 80

drwxr-xr-x   6 chenqianqian  staff    204  4 17 17:39 .

drwxr-xr-x+ 41 chenqianqian  staff   1394  4 17 17:24 ..

-rw-r--r--   1 chenqianqian  staff  36864  4 17 17:33 db.sqlite3

-rwxr-xr-x   1 chenqianqian  staff    809  4 17 17:24 manage.py

drwxr-xr-x   9 chenqianqian  staff    306  4 17 17:39myapp

drwxr-xr-x   7 chenqianqian  staff    238  4 17 17:33 testproject


$ cd myapp/

$ ls -la

total 40

drwxr-xr-x  9 chenqianqian  staff  306  4 17 17:39 .

drwxr-xr-x  6 chenqianqian  staff  204  4 17 17:39 ..

-rw-r--r--  1 chenqianqian  staff    0  4 17 17:39 __init__.py

-rw-r--r--  1 chenqianqian  staff   63  4 17 17:39 admin.py

-rw-r--r--  1 chenqianqian  staff   85  4 17 17:39 apps.py

drwxr-xr-x  3 chenqianqian  staff  102  4 17 17:39 migrations

-rw-r--r--  1 chenqianqian  staff   57  4 17 17:39 models.py

-rw-r--r--  1 chenqianqian  staff   60  4 17 17:39 tests.py

-rw-r--r--  1 chenqianqian  staff   63  4 17 17:39 views.py


2.创建数据模型

定义模型即定义该模型所对应的数据库设计及其附带的元数据。在这个简单的投票应用中,我们将创建两个模型: QuestionChoiceQuestion对象具有一个question_text(问题)属性和一个publish_date(发布时间)属性。 Choice有两个字段:选择的内容和选择的得票统计。 每个Choice与一个Question关联。

编辑models.py 文件:

$ vi models.py 

$ more models.py 

from django.db import models


# Create your models here.


class Question(models.Model):

    question_text=models.CharField(max_length=200)

    pub_date=models.DateTimeField('data publlish')


class Choice(models.Model):

    question=models.ForeignKey(Question)

    choice_text=models.CharField(max_length=200)

    vote=models.IntegerField(default=0)

       上述代码非常直观。每个模型都用一个类表示,该类继承自django.db.models.Model每个模型都有一些类变量,在模型中每个类变量都代表了数据库中的一个字段。注意我们使用ForeignKey定义了一个关联。它告诉Django每个Choice都只关联一个Question


3.激活模型

编辑testproject/settings.py文件,并修改INSTALLED_APPS设置以包含字符串'myapp':

# Application definition


INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

   'myapp',

]

让Django知道要包含myapp应用。 让我们运行另外一个命令:

$ python manage.py makemigrations myapp

通过运行makemigrations告诉Django,已经对模型做了一些更改(在这个例子中,你创建了一个新的模型)并且会将这些更改存储为迁移文件

这些文件存储在myapp/migrations下,我们可以通过以下命令来查看迁移行为所执行的SQL语句:

$ python manage.py sqlmigrate myapp 0001

如果有兴趣,你还可以运行python manage.py check它会检查你的项目中的模型是否存在问题,而不用执行迁移或者操作数据库。


由于我们新增了一些模型,所以需要我们执行下面命令创建相应的数据库表:

$ python manage.py migrate

结论:当我们创建应用模型时需要进行三个步骤--编辑models.py文件,运行python manage.py makemigrations命令,运行python manage.py migrate命令


4.进一步丰富models.py文件

我们可以根据应用的需要向models.py文件中增加函数的定义

#--------------------------------------------------------------------
import datetime
from django.db import models
from django.utils import timezone

# Create your models here.

class Question(models.Model):
    question_text=models.CharField(max_length=200)
    pub_date=models.DateTimeField('data publlish')

    def _str_(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date>=timezone.now-datetime.timedelta(days=1)

class Choice(models.Model):
    question=models.ForeignKey(Question)
    choice_text=models.CharField(max_length=200)
    vote=models.IntegerField(default=0)

    def _str_(self):
        return self.choice_text
#------------------------------------------------------------------------









你可能感兴趣的:(Django)