如何在非默认数据库中基于表格在Django中创建表单?

时间:2016-10-13 17:53:57

标签: django django-forms django-database

假设我有属于数据库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。我该如何解决这个问题?

1 个答案:

答案 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