django入門-模型-part2

曲珂發表於2017-03-06

尊重作者的勞動,轉載請註明作者及原文地址 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)

本節完

相關文章