save() получил неожиданный аргумент ключевого слова 'using'

Я использую систему с несколькими базами данных для моего проекта 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))

моя модель

class CompanyDataset(models.Model):
    name = models.CharField(max_length=255, blank=True)
    ....
    ...
    ...

    def __unicode__(self):
        return self.name

    class Meta:
        db_table = 'company_dataset'
        managed = True

моя форма:

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

settingsLocal

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

Заранее спасибо за помощь.:)

3 ответа

Решение

Решением было создать базу данных пользователя: https://docs.djangoproject.com/en/dev/topics/db/multi-db/

Вот рабочий пример, который понравился примеру, который я дал в своем первоначальном вопросе:

dbRouter.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'

Спасибо всем за помощь:)

using= Ключевое слово аргумент в модели save() метод, а не ModelForm сохранить метод. Вы должны сделать это вместо этого:

...

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

...

Документация ничего не говорит о using аргумент для метода сохранения формы. Есть один для сохранения модели, хотя. Таким образом, вы можете получить объект модели, сохранив с помощью commit=False, а затем сохраните его с помощью using:

selectedObject = formCompany2.save(commit=False)
selectedObject.save(using='dataset')
Другие вопросы по тегам