學習動力
我今年的專案主要基於django開發,學習了很多新東西。我很多時候,擔心日後會忘記很多有趣的東西,我想寫下筆記。但是從哪個方面入手,我沒有思路。所以檢視了一些書,根據目錄進行總結。希望自己不會錯過什麼!
定義模型
為什麼使用orm
django豐富的變數型別
為了簡單,我直接編寫和官網一樣的例子。
from django.db import models
class person(models.model):
first_name = models.charfield(max_length=30)
last_name = models.charfield(max_length=30)
from __future__ import unicode_literals
from django.db import migrations, modelsclass
migration(migrations.migration):
dependencies = [
]
operations = [
migrations.createmodel(
name='person',
fields=[
('id', models.autofield(verbose_name='id', serialize=false, auto_created=true, primary_key=true)),
('first_name', models.charfield(max_length=30)),
('last_name', models.charfield(max_length=30)),
],
),
]
從上面的**可以看出,系統不僅僅給生成first_name,last_name還有id,它的型別是autofield類,既然學習的是型別的定義,那我現在可以在自己的腦海中留下乙個思維圖。
好啦!我現在有幾個問題:
1)我一定要生成id嗎?
2)我可以修改charfield的max_length屬性,還能修改什麼屬性?
3)migrations.migration又是乙個什麼樣子的類呢?
現在執行migrate然後檢視sqlite生成的**。
我們來試試看,如何設定meta類裡面的屬性,來改變我們的表名。
class person(models.model):
#rest of code
class meta:
db_table = 'new_table'
執行makemigrations我們會在終端得到下面的資訊。
檢視我們的0002檔案,得到如下的內容。
from __future__ import unicode_literals
from django.db import migrations, models
class migration(migrations.migration):
dependencies = [
]
operations = [
migrations.altermodeltable(
name='person',
table='new_table',
),
]
從上面生成的**可以看出,django並不是從新生成資料庫的各個域,只是修改名字而已,與我們平時使用sql語句的做法應該是一致的。繼續執行migrate我們檢視生成的sql語句如下:
create table "new_table" ("id" integer not null primary key autoincrement, "first_name" varchar(30) not null, "last_name" varchar(30) not null);
的確,是從新改寫了表名,我們得到了新的表名,那麼如果裡面已經存有資料,該錶名會刪除資料嗎?為了,進一步測試,我們先把這個類註冊到admin中。
from django.contrib import admin
from .models import person
admin.site.register(person)
記住,別忘記建立管理員賬戶。建立後就可以在管理員裡面增加資料到person類啦。
然後,我們再修改meta的名字,看看資料是否會被刪除。
現在,資料為這個。我們試著從新把表名改了(改回系統預設的)
]我們這次,檢視到系統是更加第二次修改的記錄進行的,我們繼續看看我們的資料是否丟失。
資料還在,說明我們的django是會保護我們的資料的,我們可以放心的去做啦。
使用模型
總結
django 定義模型
字段型別 字段選項 關係可以維護遞迴的關聯關係,使用 self 指定,詳見 自關聯 用一訪問多 物件.模型類小寫 set bookinfo.heroinfo set用一訪問一 物件.模型類小寫 heroinfo.bookinfo訪問id 物件.屬性 id heroinfo.book id class...
Django模型類定義
資料庫表名 可通過db table指明資料庫表名。關於主鍵 django會為表建立自動增長的主鍵列,每個模型只能有乙個主鍵列,如果使用選項設定某屬性為主鍵列後django不會再建立自動增長的主鍵列。預設建立的主鍵列屬性為id,可以使用pk代替,pk全拼為primary key。屬性命名限制 字段型別...
Django 模型之定義屬性
django 模型之定義屬性 django根據屬性的型別確定以下資訊 django會為表建立自動增長的主鍵列,每個模型只能有乙個主鍵列,如果使用選項設定某屬性為主鍵列後django不會再建立自動增長的主鍵列。預設建立的主鍵列屬性為id,可以使用pk代替,pk全拼為primary key。注意 pk是...