save()得到意外的关键字参数“using”

2024-10-01 13:37:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我的django项目使用多数据库系统。在

但是当我试图保存表单时,我得到了一个错误:save()得到了一个意外的关键字参数“using”

下面是我的简单代码:

我的观点:

def addCompany2(request):
"""Add a company"""

    selectedObject = Companydataset()

if request.method == 'POST':
    formCompany2 = CompanyForm2(request.POST, instance=selectedObject)
    selectedObject = formCompany2.save(using='dataset')
else:
    formCompany2 = CompanyForm2(instance=selectedObject)

return render_to_response('company/addCompany2.html', {'referer': referer, 'formCompany2': formCompany2}, context_instance=RequestContext(request))

我的模型

^{pr2}$

我的表格:

class CompanyForm2(ModelForm):

    class Meta:
        model = CompanyDataset
        #exclude = ('website')

    def __init__(self, *args, **kwargs):
        super(CompanyForm2, self).__init__(*args, **kwargs)

        self.fields.keyOrder = [
            'nom',
            'country'
            ]

设置本地

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'XXXXX',
        'USER': 'XXXXX',
        'PASSWORD': 'XXXXX',
        'HOST': '127.0.0.1',
        'PORT': '',
    },
    'dataset': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'XXXXX',
        'USER': 'XXXXX',
        'PASSWORD': 'XXXXX',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

参考文档:https://docs.djangoproject.com/en/1.6/topics/db/multi-db/我不明白它为什么不起作用?我可能做错了什么,但我找不到什么。在

我的django版本是:1.6.2

提前谢谢你的帮助。:)


Tags: djangoinstanceselfdbrequestsavedefpost
3条回答

文档没有说明窗体的save方法的using参数。不过,有一个是为了保存模型。因此,您可以通过使用commit=False保存模型对象,然后使用using保存它:

selectedObject = formCompany2.save(commit=False)
selectedObject.save(using='dataset')

using=关键字参数在模型save()方法上,而不是ModelForm保存方法上。您应该这样做:

...

if request.method == 'POST':
    formCompany2 = CompanyForm2(request.POST, instance=selectedObject)
    selectedObject = formCompany2.save(commit=False)
    selectedObject.save(using='dataset')

...

解决方案是创建一个数据库用户:https://docs.djangoproject.com/en/dev/topics/db/multi-db/#database-routers

以下是我在第一个问题中给出的工作示例:

在数据库路由器.py在

import django
from company.models import CompanyDataset


class CompanyDatasetRouter(object):

    def db_for_read(self, model, **hints):
        #if isinstance(model, CompanyDataset):
        if model == CompanyDataset:
            return 'dataset'
        else:
            return 'default'

    def db_for_write(self, model, **hints):
        if model == CompanyDataset:
            return 'dataset'
        else:
            return 'default'

感谢大家的帮助:)

相关问题 更多 >