django入门-模型-part2

尊重作者的劳动,转载请注明作者及原文地址 http://www.cnblogs.com/txwsqk/p/6511177.html 

完全翻译自官方文档 https://docs.djangoproject.com/en/1.10/intro/tutorial02/

这章讲数据库相关

在settings.py的数据库配置中默认是使用sqllite,如果只是用来练手那么你不用修改数据库的配置

# Database
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

如果要用mysql,就是下面的配置

DATABASES = { 
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',    # 数据库名称
        'USER': 'root',
        'PASSWORD': 'password',  
        'HOST': '127.0.0.1',
    }   
}

别忘了修改下配置文件的时区和语言

LANGUAGE_CODE = 'zh-hans'  # django 1.10种要用zh-hans,如果用zh-cn会报错

TIME_ZONE = 'Asia/Shanghai'

django默认加载的apps(settings.py中的INSTALLED_APPS)需要用到数据库,下面我们先创建需要用的库和表

python manage.py migrate

下面在应用中创建数据库模型 polls/models.py

from django.db import models


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


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

django支持数据库的外键: 多对一,多对多,一对一

关于Field的具体内容请参考 https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.Field

要是我们的model被django发现,需要在INSTALLED_APPS中添加我们的应用

INSTALLED_APPS = [
    'pools',
    'suit',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

suit这个应用是django admin的一个扩展,可以让django的admin界面更好看,推荐!!!

下面有几个命令要说明一下

python manage.py makemigrations polls #在本地生成一个文件 ,记录你的model的变动

python manage.py sqlmigrate polls 0001 # 详细显示出django根据这次修改的model.py文件 实际要做的事,它只是打印一下内容,而不会实际去修改数据库

python manage.py migrate # 运行这个命令,你的数据库就根据你的models.py完成修改了

python manager.py check # 检查你的model.py

如果你要修改你的模型models.py 记住3个步骤

1. 修改你的models.py
2. 执行  python manage.py makemigrations 
3. python manage.py migrate 应用修改

最好为你的每个模型添加__str__()方法,这会让你的模型的输出更加友好

不然可能是这样的输出

>>> Question.objects.all()
<QuerySet [<Question: Question object>]>

所以请添加__str__()方法

from django.db import models
from django.utils.encoding import python_2_unicode_compatible

@python_2_unicode_compatible  # 兼容python2
class Question(models.Model):
    # ...
    def __str__(self):
        return self.question_text

@python_2_unicode_compatible  
class Choice(models.Model):
    # ...
    def __str__(self):
        return self.choice_text

然后它会这么显示

# Make sure our __str__() addition worked.
>>> Question.objects.all()
<QuerySet [<Question: What's up?>]>

django自带管理后台,可以方便的查看和修改数据库内容

我们先创建后台界面的管理员账户

python manage.py createsuperuser  #根据提示输入用户名,邮箱,密码

现在可以访问后台界面了 http://127.0.0.1:8000/admin/

如果你想通过后台展示你的模型,修改应用里的admin.py

from django.contrib import admin

from .models import Question

admin.site.register(Question)

本节完

posted @ 2017-03-06 17:52  txwsqk  阅读(242)  评论(0编辑  收藏  举报