最近我下载了django_messages应用程序(私人用户到用户消息传递 django 应用程序)并将其添加到我的 django 项目中。
设置.py
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'mydjangoapp.mydjangoappdb',
'tastypie',
'gunicorn',
'south',
'relationships',
'pyapns',
'django_messages',
该应用程序运行良好,与 Django 配合得很好。但是,对于消息传递等功能,数据库可能会变得非常大。我决定创建一个专用数据库来存储所有 django_messages 数据。
设置.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'django_db',
'USER': 'django_login',
'PASSWORD': 'xxxx',
'HOST': '',
'PORT': '',
},
'message_db': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'django_messagedb',
'USER': 'django_login',
'PASSWORD': 'xxxx',
'HOST': 'XX.XXX.XX.XXX',
'PORT': '5432',
}
DATABASE_ROUTERS = ['mydjangoapp.messagerouter.MessageRouter']
只是为了澄清,这是我的messagerouter.py
class MessageRouter(object):
"""
A custom router written by Riegie to
control all database operations on models in the
django_messages application
"""
def db_for_read(self, model, **hints):
"""
Attempts to read django_messages models go to
message_db.
"""
if model._meta.app_label == 'django_messages':
return 'message_db'
return None
def db_for_write(self, model, **hints):
"""
Attempts to write django_messages models to go to
message_db.
"""
if model._meta.app_label == 'django_messages':
return 'message_db'
return None
def allow_relation(self, obj1, obj2, **hints):
"""
Allow relations if a model in the django_messages.
"""
if obj1._meta.app_label == 'django_messages' or \
obj2._meta.app_label == 'django_messages':
return True
return None
def allow_syncdb(self, db, model):
"""
Make sure the django_messages app only appears in the
'message_db" database.
"""
if db == 'message_db':
return model._meta.app_label == 'django_messages'
elif model._meta.app_label == 'django_messages':
return False
return None
如您所见,我有两个数据库,一个在运行 Django 的本地计算机上,另一个在远程计算机上。开箱即用,安装后,django_messages 自然会在默认数据库上创建表。但是,我希望它只在“message_db”数据库上创建表。
我查看了Multi-db Setup Django 文档,但它详细介绍了主/从配置。我使用了 Auth Router 示例并创建了 messagerouter.py。一切都同步了,我没有收到任何错误。
但是,当我检查远程数据库时,该表不存在!这是为什么?是因为无法与 Django 用户建立远程外键表关系吗?
更新
所以我设法使用以下命令将 Django_messages 应用程序同步到另一个数据库:./manage.py syncdb --database=message_db。这很棒。但是,当我从 Django 管理页面访问应用程序时,出现以下错误:
DatabaseError at /admin/django_messages/message/
relation "django_messages_message" does not exist
LINE 1: SELECT COUNT(*) FROM "django_messages_message"
我觉得这个错误很奇怪,因为我可以通过 pgadmin III 看到另一台服务器上的表。所以同步工作正常,但现在 Django 似乎无法识别该表。也许我的 messagerouter.py 做错了什么?