簡體   English   中英

在多個數據庫中使用 Django 模型表單時出錯

[英]Error using Django model forms with multiple databases

我想用外鍵在我的應用程序中創建一個簡單的表單。 我有兩個數據庫,一個是 Django 的默認數據庫,另一個是遺留數據庫。

顯示的錯誤消息是: Table 'django.customer' does not exist 但我想選擇我的其他數據庫,而不是 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應該是表單的 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')

如果這不起作用,請更新您的問題並發布完整的回溯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM