使ç¨å¤ä¸ªæ°æ®åº
New in Django 1.2: Please, see the release notes
大å¤æ°å
¶ä»ææ¡£é½å设使ç¨åä¸æ°æ®åºï¼æ¬æ主è¦è®¨è®ºå¦ä½å¨ Django ä¸ä½¿ç¨å¤ä¸ªæ°æ®åºã 使ç¨å¤ä¸ªæ°æ®åºï¼è¦å¢å ä¸äºæ¥éª¤ã
å®ä¹ä½ çæ°æ®åº
使ç¨å¤æ°æ®åºç第ä¸æ¥æ¯éè¿ DATABASES 设置è¦ä½¿ç¨çæ°æ®åºæå¡ãè¿ä¸ª 设置ç¨äºæ å°æ°æ®åºå«ååç¹å®çèç»è®¾ç½®åå
¸ï¼è¿æ¯ Django å®ä¹æ°æ®åºä¸è´¯çææ³ã åå
¸å
é¨ç设置åè§ DATABASES ææ¡£ã
æ°æ®åºå¯ä»¥ä½¿ç¨ä»»ä½å«åï¼ä½æ¯ default æç¹æ®æä¹ãå½æ²¡æéæ©å
¶ä»æ°æ®åºæ¶ï¼ Django æ»æ¯ä½¿ç¨å«å为 default çæ°æ®åºãå æ¤ï¼å¦æä½ æ²¡æå®ä¹ä¸ä¸ªå为 default çæ°æ®åºæ¶ï¼ä½ åºå½å°å¿äºï¼å¨ä½¿ç¨æ°æ®åºåè¦æå®ä½ æ³ç¨çæ°æ®åºã
以ä¸æ¯ä¸ä¸ªå®ä¹ä¸¤ä¸ªæ°æ®åºç settings.py 代ç çæãå®ä¹äºä¸ä¸ªç¼ºçç PostgreSQL æ°æ®åºåä¸ä¸ªå为 users ç MySQL æ°æ®åºï¼
DATABASES = { 'default': { 'NAME': 'app_data', 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'USER': 'postgres_user', 'PASSWORD': 's3krit' }, 'users': { 'NAME': 'user_data', 'ENGINE': 'django.db.backends.mysql', 'USER': 'mysql_user', 'PASSWORD': 'priv4te' } }
å¦æä½ å°è¯è®¿é® DATABASES 设置ä¸æ²¡æå®ä¹çæ°æ®åºï¼ Django ä¼æåºä¸ä¸ª django.db.utils.ConnectionDoesNotExistå¼å¸¸ã
åæ¥ä½ çæ°æ®åº
syncdb 管çå½ä»¤ä¸æ¬¡åªæä½ä¸ä¸ªæ°æ®åºã缺çæ
åµä¸ï¼å®æä½ default æ°æ®åºãä½æ¯å ä¸ --database åæ°ï¼ä½ å¯ä»¥è®© syncdb åæ¥ä¸åç æ°æ®åºãæ以è¦åæ¥æ们ä¾åä¸çæææ°æ®åºçææ模åå¯ä»¥ä½¿ç¨å¦ä¸å½ä»¤:
$ ./manage.py syncdb
$ ./manage.py syncdb --database=users
å¦æä½ ä¸æ¯åæ¥ææçç¨åºå°åä¸ä¸ªæ°æ®åºä¸ï¼ä½ å¯å®ä¹ä¸ä¸ª æ°æ®åºè·¯ç± æ¥ä¸ºæå®ç模åå®æ½ç¹å®çæ§å¶ çç¥ã
å¦æä½ è¦ç²¾ç»å°æ§å¶åæ¥ï¼é£ä¹è¿æä¸ç§æ¹å¼æ¯ä¿®æ¹ sqlall çè¾åºï¼æå·¥å¨ æ°æ®åºä¸æ§è¡å½ä»¤ï¼å½ä»¤å¦ä¸:
$ ./manage.py sqlall sales | ./manage.py dbshell
使ç¨å
¶ä»ç®¡çå½ä»¤
å
¶ä»æä½æ°æ®åºç django-admin.py å½ä»¤ä¸ syncdb 类似ï¼ä»ä»¬ä¸æ¬¡åª æä½ä¸ä¸ªæ°æ®åºï¼ä½¿ç¨ --database æ¥æ§å¶ä½¿ç¨åªä¸ªæ°æ®åºã
èªå¨æ°æ®åºè·¯ç±
使ç¨å¤æ°æ®åºæç®åçæ¹æ³æ¯è®¾ç½®ä¸ä¸ªæ°æ®åºè·¯ç±æ¹æ¡ã缺ççè·¯ç±æ¹æ¡ç¡®ä¿å¯¹è±¡ â紧贴âå
¶åæ¬çæ°æ®åºï¼ä¾å¦ï¼ä¸ä¸ªå¯¹è±¡ä»åªä¸ªæ°æ®åºåå¾ï¼å°±ä¿åååªä¸ªæ°æ®åºï¼ã 缺ççè·¯ç±æ¹æ¡è¿ç¡®ä¿å¦æä¸ä¸ªæ°æ®åºæ²¡ææå®ï¼ææçæ¥è¯¢é½ä¼ä½ç¨äº 缺ç æ°æ® åºã
ä½ ä¸å¿
为å¯å¨ç¼ºçè·¯ç±æ¹æ¡ä½ä»»ä½äºï¼å 为å®æ¯âå¼ç®±å³ç¨âçãä½æ¯ï¼å¦æä½ è¦æ§è¡ ä¸äºæ´æ趣çæ°æ®åºåé
è¡ä¸ºçè¯ï¼ä½ å¯ä»¥å®ä¹å¹¶å®è£
ä½ èªå·±çæ°æ®åºè·¯ç±ã
æ°æ®åºè·¯ç±
ä¸ä¸ªæ°æ®åºè·¯ç±æ¯ä¸ä¸ªç±»ï¼è¿ä¸ªç±»æå¤æå个æ¹æ³ï¼
db_for_read(model, **hints)
建议 model 对象åæä½æ¶ä½¿ç¨çæ°æ®åºã
å¦æä¸ä¸ªæ°æ®åºæä½å¯ä»¥æä¾å¯¹éæ©æ°æ®åºæç¨çéå ä¿¡æ¯ï¼é£ä¹å¯ä»¥éè¿ hints åå
¸æä¾ãè¯¦è§ ä¸æ ã
å¦æ没æ建议åè¿å None ã
db_for_write(model, **hints)
建议 model 对象读æä½æ¶ä½¿ç¨çæ°æ®åºã
å¦æä¸ä¸ªæ°æ®åºæä½å¯ä»¥æä¾å¯¹éæ©æ°æ®åºæç¨çéå ä¿¡æ¯ï¼é£ä¹å¯ä»¥éè¿ hints åå
¸æä¾ãè¯¦è§ ä¸æ ã
å¦æ没æ建议åè¿å None ã
allow_relation(obj1, obj2, **hints)
å½ obj1 å obj2 ä¹é´å
许æå
³ç³»æ¶è¿å True ï¼ä¸å
许æ¶è¿å False ï¼æè
没æ æè§æ¶è¿å None ãè¿æ¯ä¸ä¸ªçº¯ç²¹çéªè¯æä½ï¼ç¨äºå¤é®åå¤å¯¹å¤æä½ä¸ï¼ä¸¤ä¸ªå¯¹è±¡ çå
³ç³»æ¯å¦è¢«å
许ã
allow_syncdb(db, model)
å³å® model æ¯å¦å¯ä»¥å db 为å«åçæ°æ®åºåæ¥ãå¦æå¯ä»¥è¿å True ï¼ å¦æä¸å¯ä»¥è¿å False ï¼æè
没ææè§æ¶è¿å None ãè¿ä¸ªæ¹æ³ç¨äºå³å®ä¸ä¸ªç»å® æ°æ®åºç模åæ¯å¦å¯ç¨ã
ä¸ä¸ªè·¯ç±ä¸å¿
æä¾ ææ è¿äºæ¹æ³ï¼å¯ä»¥çç¥å
¶ä¸ä¸ä¸ªæå¤ä¸ªãå¦æå
¶ä¸ä¸ä¸ªæ¹æ³è¢« çç¥äºï¼é£ä¹ Django ä¼å¨æ§è¡ç¸å
³æ£æ¥æ¶è·³è¿ç¸åºè·¯ç±ã
æ示åæ°
æ°æ®åºè·¯ç±æ¥æ¶çâæ示âåæ°å¯ç¨äºå³å®åªä¸ªæ°æ®åºåºå½æ¥æ¶ä¸ä¸ªç»å®ç请æ±ã
ç®åï¼å¯ä¸å¯ä»¥æä¾çæ示åæ°æ¯ å®ä¾ ï¼å³ä¸ä¸ªä¸è¯»åæä½ç¸å
³ç对象çå®ä¾ã å¯ä»¥æ¯ä¸ä¸ªå·²ä¿åç对象çå®ä¾ï¼ä¹å¯ä»¥æ¯ä¸ä¸ªå¤å¯¹å¤å
³ç³»ä¸æ·»å çå®ä¾ãå¨æäºæ
åµä¸ï¼ ä¹å¯è½æ²¡æ对象çå®ä¾å¯ä»¥æä¾ãè·¯ç±ä¼æ£æ¥æ示å®ä¾æ¯å¦åå¨ï¼å¹¶ç¸åºå°å³å®æ¯å¦æ¹å è·¯ç±è¡ä¸ºã
使ç¨è·¯ç±
æ°æ®åºè·¯ç±ä½¿ç¨ DATABASE_ROUTERS 设置æ¥å®è£
ãè¿ä¸ªè®¾ç½®å®ä¹ä¸ä¸ªç±»å称 å表ï¼æ¯ä¸ªç±»å®ä¹ä¸ä¸ªç¨äºä¸»è·¯ç± (django.db.router) çè·¯ç±ã
主路ç±ç¨äº Django åé
æ°æ®åºæä½ãå½ä¸ä¸ªæ¥è¯¢æ³è¦ç¥é使ç¨åªä¸ªæ°æ®åºæ¶ï¼ä¼æä¾ ä¸ä¸ªæ¨¡ååä¸ä¸ªæ示ï¼å¦ææçè¯ï¼ï¼å¹¶è°ç¨ä¸»è·¯ç±ã
Django å°±ä¼æ次åºå°è¯æ¯ä¸ªè·¯ç±ï¼
ç´å°æ¾å°åéçè·¯ç±å»ºè®®ãå¦ææ¾ä¸å°è·¯ç±å»ºè®®å°±ä¼å°è¯å®ä¾æ示çå½åç _state.db ãå¦æ没ææä¾è·¯ç±æ示ï¼æè
å®ä¾æ²¡æå½åæ°æ®åºç¶æï¼é£ä¹
主路ç±ä¼ åé
缺ç æ°æ®åºã
ä¸ä¸ªä¾å
ä»
ç¨äºç¤ºä¾ç®çï¼
è¿ä¸ªä¾åä»
ç¨äºå±ç¤ºè·¯ç±å¦ä½æ¹åæ°æ®åºç使ç¨ãæ¬ä¾ææ忽ç¥äºä¸äºå¤æçä¸è¥¿ä»¥ 便äºæ´å¥½çå±ç¤ºè·¯ç±æ¯å¦ä½å·¥ä½çã
å¦æä»»ä½ä¸ä¸ª myapp ä¸ç模åå
å«ä¸ å¦ä¸ä¸ª æ°æ®åºä¸æ¨¡åçå
³ç³»æ¶ï¼æ¬ä¾ æ¯æ æçãåè§ è·¨æ°æ®åºå
³ç³»ä¸èä¸ä»ç» ç Django å¼ç¨å®æ´æ§é®é¢ã
æ¬ä¾ç主/ä»é
ç½®ä¹æ¯æ缺é·çï¼å®æ²¡æå¤çå¤å¶å»¶æ¶ï¼æ¯å¦å 为æåæä½ä¼ éç»ä» æ°æ®åºèè´¹æ¶é´è产ççæ¥è¯¢ä¸ä¸è´ï¼ï¼ä¹æ²¡æèèä¸æ°æ®åºä½¿ç¨çç¥ç交äºä½ç¨ã
é£ä¹ï¼è¿ä¸ªä¾åæä»ä¹ç¨å¢ï¼æ¬ä¾ä»
ç¨äºæ¼ç¤ºä¸ä¸ª myapp åå¨äº other æ°æ®åºï¼ ææå
¶ä»æ¨¡åä¹é´æ¯ä¸»/ä»å
³ç³»ï¼ä¸åå¨äº master ã slave1 å slave2 æ°æ®åºãæ¬ä¾ä½¿ç¨äºä¸¤ä¸ªè·¯ç±:
class MyAppRouter(object): """ ä¸ä¸ªæ§å¶ myapp åºç¨ä¸æ¨¡åç æææ°æ®åºæä½çè·¯ç± """ def db_for_read(self, model, **hints): "myapp åºç¨ä¸æ¨¡åçæä½æå 'other'" if model._meta.app_label == 'myapp': return 'other' return None def db_for_write(self, model, **hints): "myapp åºç¨ä¸æ¨¡åçæä½æå 'other'" if model._meta.app_label == 'myapp': return 'other' return None def allow_relation(self, obj1, obj2, **hints): " å¦æå
å« myapp åºç¨ä¸ç模ååå
许ææå
³ç³» " if obj1._meta.app_label == 'myapp' or obj2._meta.app_label == 'myapp': return True return None def allow_syncdb(self, db, model): " ç¡®ä¿ myapp åºç¨åªåå¨äº 'other' æ°æ®åº " if db == 'other': return model._meta.app_label == 'myapp' elif model._meta.app_label == 'myapp': return False return None class MasterSlaveRouter(object): """ ä¸ä¸ªè®¾ç½®ç®å主/ä»å®ä¹ çè·¯ç± """ def db_for_read(self, model, **hints): " ææ读æä½æåä¸ä¸ªéæºçä»æ°æ®åº " return random.choice(['slave1','slave2']) def db_for_write(self, model, **hints): " ææåæä½æå主æ°æ®åº " return 'master' def allow_relation(self, obj1, obj2, **hints): " å
许æ°æ®åºæ± ä¸ç两个对象é´çä»»ä½å
³ç³» " db_list = ('master','slave1','slave2') if obj1._state.db in db_list and obj2._state.db in db_list: return True return None def allow_syncdb(self, db, model): " æ¾ç¤ºå°æ¾ç½®æææ°æ®åºä¸ç模å " return True
ç¶åå¨ä½ ç设置æ件å¢å å¦ä¸å
容ï¼æ path.to. æ¿æ¢ä¸ºä½ å®ä¹è·¯ç±ç模åçè·¯å¾ ï¼:
DATABASE_ROUTERS = ['path.to.MyAppRouter', 'path.to.MasterSlaveRouter']
è¿ä¸ªè®¾ç½®ä¸ï¼è·¯ç±ç顺åºæ¯å¾éè¦çï¼å 为æ¥è¯¢æ¶æ¯æè¿ä¸ªè®¾ç½®ä¸ç顺åºä¾æ¬¡æ¥è¯¢çãä¸ ä¾ä¸ï¼ MyAppRouter å
äºMasterSlaveRouter ï¼å æ¤ï¼ myapp ä¸ç模åå°± ä¼å
äºå
¶ä»æ¨¡åãå¦æ DATABASE_ROUTERS 设置ä¸ä¸¤ä¸ªè·¯ç±ç顺åºåæ¢äºï¼ é£ä¹ MasterSlaveRouter.allow_syncdb() ä¼ä¼å
æ§è¡ãå 为 MasterSlaveRouter æ¯ å
ç½ä¸è±¡çï¼è¿æ ·å°±ä¼å¯¼è´ææ模åå¯ä»¥ä½¿ç¨æææ°æ®åºã
设置好ä¹å让æ们æ¥è¿è¡ä¸äºä»£ç :
>>> # ä» 'credentials' æ°æ®åºè·å¾æ°æ® >>> fred = User.objects.get(username='fred') >>> fred.first_name = 'Frederick' >>> # ä¿åå° 'credentials' æ°æ®åº >>> fred.save() >>> # éæºä»ä»æ°æ®åºè·å¾æ°æ® >>> dna = Person.objects.get(name='Douglas Adams') >>> # æ°å¯¹è±¡å建æ¶è¿æ²¡æåé
æ°æ®åº >>> mh = Book(title='Mostly Harmless') >>> # è¿ä¸ªèµå¼ä¼åè·¯ç±ååºè¯·æ±ï¼å¹¶æ mh çæ°æ®åºè®¾ç½®ä¸ºä¸ author 对象åæ ·ç >>> # æ°æ®åº >>> mh.author = dna >>> # è¿ä¼å¼ºå¶ 'mh' å®ä¾ä½¿ç¨ä¸»æ°æ®åº... >>> mh.save() >>> # ... ä½å¦ææ们éæ°è·å对象ï¼å°±ä¼ä»ä»æ°æ®åºä¸è·å >>> mh = Book.objects.get(title='Mostly Harmless')
æå¨éæ©æ°æ®åº
Django ä¹æä¾ä¸ä¸ªå¯ä»¥è®©ä½ éè¿ä»£ç å®å
¨æ§å¶æ°æ®åºä½¿ç¨ç API ãæå¨å®ä¹æ°æ®åºåé
ä¼å
äºè·¯ç±ã
为ä¸ä¸ª æ¥è¯¢é æå¨éæ©ä¸ä¸ªæ°æ®åº
ä½ å¯ä»¥å¨ æ¥è¯¢é âé¾âä¸çä»»ä½ç¹ä¸º æ¥è¯¢é éæ©æ°æ®åºãæ们éè¿å¨ æ¥è¯¢é ä¸è°ç¨ using() æ¥å¾å°ä½¿ç¨æå®æ°æ®åºçå¦ä¸ä¸ª æ¥è¯¢é ã
using() 使ç¨ä¸ä¸ªåæ°ï¼ä½ æ³è¦è¿è¡æ¥è¯¢çæ°æ®åºçå«åãä¾å¦:
>>> # è¿ä¼è¿è¡å¨â缺çâæ°æ®åºä¸ã >>> Author.objects.all() >>> # è¿åæ ·ä¼è¿è¡å¨â缺çâæ°æ®åºä¸ã >>> Author.objects.using('default').all() >>> # è¿ä¼è¿è¡å¨â other âæ°æ®åºä¸ã >>> Author.objects.using('other').all()
为 save() éæ©ä¸ä¸ªæ°æ®åº
å¨ä½¿ç¨ Model.save() æ¶å ä¸ using å
³é®åå¯ä»¥æå®ä¿åå°åªä¸ªæ°æ®åºã
ä¾å¦ï¼è¦æä¸ä¸ªå¯¹è±¡ä¿åå° legacy_users æ°æ®åºåºè¯¥è¿æ ·å:
>>> my_object.save(using='legacy_users')
å¦æä½ ä¸å®ä¹ using ï¼é£ä¹ save() æ¹æ³ä¼æ ¹æ®è·¯ç±åé
ææ°æ®ä¿åå°ç¼ºç æ°æ®åºä¸ã
æä¸ä¸ªå¯¹è±¡ä»ä¸ä¸ªæ°æ®åºç§»å¨å°å¦ä¸ä¸ªæ°æ®åº
å½ä½ å·²ç»å¨ä¸ä¸ªæ°æ®åºä¸ä¿åäºä¸ä¸ªå¯¹è±¡åï¼ä½ å¯è½ä¼ä½¿ç¨ save(using=...) æè¿ä¸ª 对象移å¨å°å¦ä¸ä¸ªæ°æ®åºä¸ãä½æ¯ï¼å¦æä½ æ²¡æ使ç¨æ°å½çæ¹æ³ï¼é£ä¹å¯è½ä¼åºç°ææ³ä¸ å°çåæã
å设æå¦ä¸çä¾å:
>>> p = Person(name='Fred') >>> p.save(using='first') # ï¼ç¬¬ä¸å¥ï¼ >>> p.save(using='second') # ï¼ç¬¬äºåï¼
å¨ç¬¬ä¸åä¸ï¼ä¸ä¸ªæ°ç Person 对象被ä¿åå° first æ°æ®åºä¸ãè¿æ¶ï¼ p è¿æ²¡æä¸ä¸ªä¸»é®ï¼å æ¤ Django æ§è¡äºä¸ä¸ªINSERT SQL è¯å¥ãè¿æ ·å°±ä¼å建ä¸ä¸ª 主é®ï¼å¹¶å°è¿ä¸ªä¸»é®åé
ç» p ã
å¨ç¬¬äºå¥ä¸ï¼å 为 p å·²ç»æäºä¸ä¸ªä¸»é®ï¼æ以 Django å¨ä¿å对象æ¶ä¼å°è¯å¨æ°ç æ°æ®åºä¸ä½¿ç¨è¿ä¸ªä¸»é®ãå¦æ secondæ°æ®åºä¸æ²¡æ使ç¨è¿ä¸ªä¸»é®ï¼é£å°±ä¸ä¼æé®é¢ï¼ 该对象ä¼å¤å¶å°æ°æ°æ®åºã
ç¶èï¼å¦æ p ç主é®å¨ second æ°æ®åºä¸å·²ç»ä½¿ç¨è¿äºï¼é£ä¹ second ä½¿ç¨ è¿ä¸ªä¸»é®çå·²åå¨ç对象å°ä¼è¢« p è¦çã
æ两ç§æ¹æ³å¯ä»¥é¿å
ä¸è¿°æ
åµçåçã第ä¸ï¼ä½ å¯ä»¥æ¸
é¤å®ä¾ç主é®ãå¦æä¸ä¸ªå¯¹è±¡æ²¡æ 主主é®ï¼é£ä¹ Django ä¼æå®çä½ä¸ä¸ªæ°å¯¹è±¡ï¼å¨ä¿åå° second æ°æ®åºä¸æ¶å°±ä¸ä¼ 带æ¥æ°æ®çæ失:
>>> p = Person(name='Fred') >>> p.save(using='first') >>> p.pk = None # æ¸
é¤ä¸»é®ã >>> p.save(using='second') # åå
¥ä¸ä¸ªå
¨æ°ç对象ã
第äºç§æ¹æ³æ¯å¨ save() æ¹æ³ä¸ä½¿ç¨ force_insert é项æ¥ä¿è¯ Django æ§è¡ ä¸ä¸ª INSERT SQL:
>>> p = Person(name='Fred') >>> p.save(using='first') >>> p.save(using='second', force_insert=True)
è¿æ ·å¯ä»¥ä¿è¯å为 Fred ç人åå¨ä¸¤ä¸ªæ°æ®åºä¸ä½¿ç¨ç¸åç主é®ãå¦æå¨ä¿åå° second æ°æ®åºæ¶ä¸»é®å·²è¢«å ç¨ï¼ä¼æåºä¸ä¸ªé误ã
éæ©ä¸ä¸ªè¦å é¤æ°æ®çæ°æ®åº
缺çæ
åµä¸ï¼ä¸ä¸ªç°å对象ä»åªä¸ªæ°æ®åºå¾å°ï¼å é¤è¿ä¸ªå¯¹è±¡ä¹ä¼å¨è¿ä¸ªæ°æ®åºä¸è¿è¡:
>>> u = User.objects.using('legacy_users').get(username='fred') >>> u.delete() # ä¼ä» `legacy_users` æ°æ®åºä¸å é¤
éè¿å Model.delete() æ¹æ³ä¼ é using å
³é®ååæ°å¯ä»¥å®ä¹å¨åªä¸ªæ°æ®åºä¸å é¤ æ°æ®ã using çç¨æ³ä¸ save() æ¹æ³ä¸ä½¿ç¨è¿ä¸ªåæ°ç±»ä¼¼ã
ä¾å¦ï¼å设æ们è¦æä¸ä¸ªç¨æ·ä» legacy_users æ°æ®åºç§»å¨å° new_users æ°æ®åº å¯ä»¥ä½¿ç¨å¦ä¸å½ä»¤:
>>> user_obj.save(using='new_users') >>> user_obj.delete(using='legacy_users')
å¤æ°æ®åºæ
åµä¸ä½¿ç¨ç®¡çå¨
å¨ç®¡çå¨ä¸ä½¿ç¨ db_manager() ï¼å¯ä»¥è®©ç®¡çå¨è®¿é®ä¸ä¸ªé缺çæ°æ®åºã
ä¾å¦ï¼åè®¾ä½ æä¸ä¸ªæä½æ°æ®åºçèªå®ä¹ç®¡çå¨ User.objects.create_user() ã
å 为 create_user() æ¯ä¸ä¸ªç®¡çå¨æ¹æ³ï¼ä¸æ¯ä¸ä¸ª æ¥è¯¢é ï¼æä»¥ä½ ä¸è½
ç¨ User.objects.using('new_users').create_user() ãï¼ create_user() æ¹æ³
åªè½ç¨äº User.objects 管çå¨ï¼èä¸è½ç¨äºï¼ç®¡çå¨è¡çåºç æ¥è¯¢é ãï¼ è§£å³æ¹æ³æ¯ä½¿ç¨ db_manager() ï¼å°±è±¡ä¸é¢è¿æ ·:
User.objects.db_manager('new_users').create_user(...)
db_manager() è¿åçæ¯ç»å®å°ä½ æå®çæ°æ®åºç管çå¨çä¸ä¸ªå¯æ¬ã
å¤æ°æ®åºæ
åµä¸ä½¿ç¨ get_query_set()
å¦æä½ å¨ç®¡çå¨ä¸éè½½äº get_query_set() ï¼è¯·ç¡®ä¿å¨å
¶ç¶ç±»ä¸ä¹è°ç¨äºç¸åçæ¹æ³ ï¼ä½¿ç¨ super() ï¼æè
æ£ç¡®å¤ç管çå¨ä¸ç _db å±æ§ï¼ä¸ä¸ªå
å«è¦ä½¿ç¨çæ°æ®åº å称çå符串ï¼ã
ä¾å¦ï¼å¦æä½ è¦ä» get_query_set æ¹æ³è¿åä¸ä¸ªèªå®ä¹ æ¥è¯¢é ç±»ï¼é£ä¹ä½ å¯ä»¥ è¿æ ·å:
class MyManager(models.Manager): def get_query_set(self): qs = CustomQuerySet(self.model) if self._db is not None: qs = qs.using(self._db) return qs
å¨ Django 管çæ¥å£ä¸ä½¿ç¨å¤æ°æ®åº
Django ç管çæ¥å£æ²¡æææ¾æ¯æå¤æ°æ®åºãå¦ææ³è¦æ¯æçè¯ä½ å¿
é¡»åèªå®ä¹ ModelAdmin ã
温馨提示:答案为网友推荐,仅供参考