使用Django模型表单与多个数据库时出错

时间:2015-10-07 14:52:33

标签: python django django-forms

我希望在我的应用程序中使用外键创建一个简单的表单。我有两个数据库,一个是Django的默认数据库,另一个是遗留数据库。

显示的错误消息是:表' django.customer'不存在。但我想选择我的其他数据库,而不是Django。我是怎么做到的?

这是我的模特:

from django.db import models
from register.models import Customer

class Service(models.Model):
    # ..
    customer = models.ForeignKey('register.Customer', db_column='customer')
    # ..

这是其他应用中的其他模型。

class Customer(models.Model):
    codigo = models.AutoField(primary_key=True)

这两个应用程序都在其他数据库中,而不是Django。

我的settings.py:

DATABASES = {
    'default': {
        'NAME': 'django',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'my-user',
        'PASSWORD': 'my-password',
        'HOST': '',
        'PORT': ''
    },
    'other-database': {
        'NAME': 'other-database',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'my-user',
        'PASSWORD': 'my-password',
        'HOST': '',
        'PORT': ''
    }
}

在HTML中我把它:

{{ form_service }}

这是我的forms.py

from attendance.models import Service
from register.models import Customer
from django.http import HttpResponseRedirect, HttpResponse
from django.core.exceptions import ValidationError

class FormService(ModelForm):

    class Meta:
        model = Service
        fields = ('my_fields', 'my_fields', 'customer')

这是我的views.py

def service(request):
    form_service = FormService()
    return render(request, 'service.html', {'form_service': form_service})

我认为错误就在这里。也许我必须定义我的其他数据库,它应该在Django数据库中选择。

我尝试了这个,但没有奏效。

def service(request):
    queryset = Customer.objects.using('other-database').all()
    form_service = FormService(instance = queryset)

    return render(request, 'service.html', {'form_service': form_service})

1 个答案:

答案 0 :(得分:1)

您的代码instance = queryset没有意义,因为instance应该是表单的Service实例,而不是Customer实例的查询集。

尝试使用表单__init__方法设置字段的查询集。

class FormService(ModelForm):
    def __init__(self, *args, **kwargs):
        super(FormService, self).__init__(*args, **kwargs)
        self.fields['customer'].queryset = Customer.objects.using('other-database').all()

    class Meta:
        model = Service
        fields = ('my_fields', 'my_fields', 'customer')

如果这不起作用,请更新您的问题并发布完整的追溯。