假设我有属于数据库Y的A类和B类,它不是我的Django应用程序中的默认数据库。
class A(models.Model):
attA = models.CharField(max_length = 1024)
class B(models.Model):
forA = models.ForgeinKey(A)
attB = models.CharField(max_length = 8)
class BForm(forms.ModelForm):
class Meta:
model = B
在这种情况下,表A和B都驻留在我的非默认数据库中。如何指定使用此数据库查找这些表而不是查看我的默认表。在我看来,我有
form = BForm()
但我得到一个错误,说编程错误:关系不存在,因为它查找我的默认数据库而不是实际存在表的alt。我该如何解决这个问题?
答案 0 :(得分:0)
你应该定义一个数据库路由器来告诉Django在哪个数据库中存储哪个模型。 [docs]
一个例子是:
<强> Settings.py 强>
DATABASE_ROUTERS = ['path.to.YourRouter']
<强> router.py 强>
class YourRouter(object):
def db_for_read(self, model, **hints):
if model.__class__.__name__ in ['A', 'B']:
return 'secondDB'
return 'default'
def db_for_write(self, model, **hints):
return 'default'
def allow_relation(self, obj1, obj2, **hints):
return True