2015-10-07 3 views
2

Я хочу создать простую форму в своем приложении с внешним ключом. У меня две базы данных, а по умолчанию - Django, а другая - устаревшая база данных.Ошибка при использовании форм модели 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

В базе данных 'Django' вы подразумеваете базу данных по умолчанию в файле' settings.py'? У вас есть вторая база данных, определенная в файле 'settings.py'? – GwynBleidD

+0

Пожалуйста, будьте более ясны с вашим именем вопроса, так что это может быть полезно другим людям с вашей проблемой. – Gocht

+0

Да, мои settings.py с двумя определенными базами данных. –

ответ

1

Ваш код instance = queryset не имеет смысла, потому что instance должен быть экземпляром службы по форме, а не QuerySet экземпляров клиентов.

Попробуйте установить запрос в поле в форме __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') 

Если это не поможет, пожалуйста, обновите свой вопрос и опубликуйте полный ответ.

+0

Я новичок в ООП. Я попробовал ваш ответ, однако показал это сообщение: ** super (type, obj): obj должен быть экземпляром или подтипом типа **. –

+0

Извините, парень, я написал неправильно. Сообщения прекратились. Теперь моя форма не отображается в моем шаблоне. –

+0

В приведенном выше коде не должно исчезнуть форма, если вы сохранили 'form_service = FormService()' в представлении. Вы еще не написали код для обработки формы. Прочтите документы в [работе с формами в представлении] (https://docs.djangoproject.com/en/1.8/topics/forms/#the-view), чтобы начать работу. – Alasdair

Смежные вопросы