我的評註寫在最下é¢ï¼Œå¦‚æžœä½ æ‡¶å¾—çœ‹å®Œå…¨æ–‡ï¼Œè«‹ä¸€å®šè¦åŽ»çœ‹ä¸€ä¸‹æœ€æœ«çš„çµè«–。
Django çš„ magic-removal branch 將在 0.92 裡ç¾èº«ï¼Œç™¼è¡Œçš„æ—¥å應該ä¸é 了。magic-removal è½èªªæœƒæœ‰éžå¸¸å·¨å¤§çš„æ”¹è®Šï¼Œå·¨å¤§åˆ°äº†æˆ‘䏿•¢åŽ»çœ‹æœ‰å¤šå·¨å¤§çš„ç¨‹åº¦ã€‚å¥½ä¸å®¹æ˜“把資料從 COREBlog 轉出來了,如果還è¦å†é‡å¯«ç³»çµ±ï¼Œé‚£å¯çœŸææ€–。
å¹¸å¥½ï¼Œå¯¦éš›çœ‹äº†ä¸€ä¸‹èªªæ˜Žä»¥å¾Œï¼Œç™¼ç¾ magic-removal æ²’æœ‰é‚£éº¼å¯æ€•。除了會把一些功能放到更åˆç†çš„ä½ç½®ä¹‹å¤–,最大的改變就是把原本神奇的 ORM model "module" æ£æœ¬æ¸…æºæˆé¡žåˆ¥ (class),其它許多改變,其實都和 ORM 的這一點改變有關。
原本的 ORM model module (這真繞å£) 是一個éžå¸¸ç¥žå¥‡çš„æ±è¥¿ï¼Œæˆ‘æ›¾ç¶“å˜—è©¦é€²è¡Œèªªæ˜Žï¼Œä¸éŽçœŸé›£ã€‚module (模組) 在 Python 裡也是一種物件,並且å¯ä»¥ç›´æŽ¥åœ¨ç¨‹å¼ç¢¼è£¡é¢è£½é€ 出來。這種作法éžå¸¸ä¸æ£å¸¸ï¼Œå› 為一般èªçŸ¥çš„ Python 模組就是一個 .py 檔,但 Django 裡é¢è‡ªè¡Œè£½é€ çš„ ORM model module å»ä¸å˜åœ¨æ–¼ç£ç¢Ÿä¸Šï¼
考慮一個 Django app 的 model:
from django.core import meta
class Sample( meta.Model ):
field1 = meta.CharField( "field1", maxlength=32 )
field2 = meta.CharField( "field2", maxlength=32 )
å‡è¨å–å為 app/models/somemodel.py (app 是 Django app çš„å稱),那麼我們在 Django 程å¼ä¸è¦ä½¿ç”¨é€™å€‹ ORM model çš„æ™‚å€™ï¼Œä¸¦ä¸æ˜¯ç”¨ï¼š
from app.models.somemodel import Sample
obj = Sample( field1="f1", field2="f2" )
obj.save()
而è¦ç”¨ï¼š
from django.models.somemodel import samples
obj = samples.Sample( field1="f1", field2="f2" )
obj.save()
看ï¼åœ¨ç›®å‰çš„ Django (0.91) ä¸ä½¿ç”¨ ORM çš„èªžæ³•ï¼Œæˆ‘å€‘æ‰€é æ–™ä¸çš„ Sample, somemodel 全都出ç¾åœ¨å¥‡å¦™çš„地方,還多了一個完全沒有定義éŽçš„ samples (這就是 Django ç‚ºæˆ‘å€‘è£½é€ å‡ºä¾†çš„ ORM model module)ï¼çœŸæ˜¯å¤ 「神奇ã€äº†ï¼Œæˆ–è€…èªªå¤ é³¥äº†å§ã€‚
ä¸éŽ magic-removal 會拯救世界。在 magic-removal ä¸åŽŸæœ¬æ”¾åœ¨ app/models/somemodel.py 的檔案,ç¾åœ¨è¦æ”¹æ”¾åˆ°æ¯”較åˆç†çš„ app/models.py 裡é¢åŽ»ã€‚å…§å®¹é‚„æ˜¯å·®ä¸å¤šï¼š
from django.db import models
class Sample( models.Model ):
field1 = models.CharField( "field1", maxlength=32 )
field2 = models.CharField( "field2", maxlength=32 )
其實就是把 django.core.meta æ”¹æˆ django.db.models。使用 ORM 的時候變æˆï¼š
from app.models import Sample
obj = Sample( field1="f1", field2="f2" )
obj.save()
變得直覺了。
å„ä½ï¼Œå¦‚æžœè¦ä¾†çŽ© Django 的話,直接 check out magic-removal branch,ä¸è¦ç”¨ 0.91 release äº†ã€‚ä¾æˆ‘的感覺,舊的語法難看åˆå¤æ€ªï¼›magic-removal æ£åœ¨å¾€å°çš„æ–¹å‘èµ°ï¼Œåªæ˜¯ 0.91 與 0.92 çš„å·®è·æœƒè®“äººè¦ºå¾—æœ‰é»žå¯æ€•。然而,0.92 冿²’多久就è¦ç™¼è¡Œï¼Œæˆ‘想ç¾åœ¨æ˜¯æ”¾æ£„ 0.91 的時候了。