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