Skip to main content
 首页 » 编程设计

python之将 Django 模型表单与多个数据库一起使用时出错

2025年05月04日29qq号

我想在我的应用程序中使用外键创建一个简单的表单。我有两个数据库,一个是 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。

我的设置.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}) 

请您参考如下方法:

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

尝试在表单的__init__方法中设置字段的queryset。

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') 

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