原文:https://tutorial.djangogirls.org/zh/django_models/
创建应用程序
python manage.py startapp blog
你会注意到一个新的blog
目录被创建,它现在包含一些文件。我们的目录和我们的项目中的文件现在应该看起来像这样:
djangogirls
├── mysite
| __init__.py
| settings.py
| urls.py
| wsgi.py
├── manage.py
└── blog
├── migrations
| __init__.py
├── __init__.py
├── admin.py
├── models.py
├── tests.py
└── views.py
创建应用程序后,我们还需要告诉 Django 它应该使用它。 我们是在mysite/settings.py
文件中这样做的。 我们需要找到INSTALLED_APPS
并在它下面添加一行'blog',
。 所以最终的代码应如下所示:
创建一个博客文章模型
我们在blog/models.py
文件中,定义所有的Models
对象— — 我们将在其中都定义我们的博客文章。
让我们打开blog/models.py
,从中删除一切并编写这样的代码:
from django.db import models
from django.utils import timezone
class Post(models.Model):
author = models.ForeignKey('auth.User')
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(
default=timezone.now)
published_date = models.DateTimeField(
blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
所有以from
或import
开始的所有行,都是需要从其他文件中添加一些内容。 所以与其复制和粘贴同样的内容,我们可以用from...... import......
来导入这些文件.class Post(models.Model):
- 这行是用来定义我们的模型 (这是一个对象
).
class
是一个特殊的关键字,表明我们在定义一个对象。Post
是我们模型的一个名字。我们可以给它取另外一个不同的名字(但是我们必须避免使用特殊字符或者空格符)。总是以首字面大写来作为类名。models.Model
表明Post是一个Django模型,所以Django知道它应该被保存在数据库中。
现在我们定义了我们曾经提及到的那些属性:title
,text
,created_date
,published_date
和author
。 为了做到那样我们需要为我们每个字段定义一个类型(它是文本吗? 是数字? 是日期? 到另一个对象的关联,比如用户吗?)。
models.CharField
- 这是你如何用为数有限的字符来定义一个文本。models.TextField
- 这是没有长度限制的长文本。这听起来用在博客文章的内容上挺适合的,对吧?models.DateTimeField
- 这是日期和时间。models.ForeignKey
- 这是指向另一个模型的连接。
Django的官方文档 https://docs.djangoproject.com/en/1.8/ref/models/fields/#field-typesdef publish(self):
def 表明这是一个函数或者方法,publish
是这个方法的名字。
方法通常会return
一些东西。 例如在__str__
方法中就有这个。 在这种情况下,当我们调用__str__()
我们将得到文章标题的文本 (字符串)。
如果关于模型尚有不清楚的,请随时问你的教练 ! 我们知道它很复杂,特别是当你同时学习对象和函数的时候。 但希望它在你看来没有那么神奇!
这里的self 不是很懂,http://python.jobbole.com/81921/
在你的数据库中为模型创建数据表
在这里的最后一步是将我们新的模型添加到我们的数据库。 首先我们必须让Django知道我们在我们的模型(我们刚刚创建的!) 有一些变更。 输入python manage.py makemigrations blog
。 它看起来会像这样:
Django为我们准备了我们必须应用到我们数据库的迁移文件。
输入python manage.py migrate blog
,然后对应的输出应该是: