我希望在我的应用程序中使用外键创建一个简单的表单。我有两个数据库,一个是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})
答案 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')
如果这不起作用,请更新您的问题并发布完整的追溯。