Django ModelForm сохранить с использованием параметра db_alias, используя

Можно ли сохранить данные объекта ModelForm с db_alias, отличным от «по умолчанию»

my_form = MyModelForm(request.POST)
my_form.save(commit=True,using="db_alias")

а также сохранение данных с экземпляром модели? Спасибо.


person pista329    schedule 10.02.2011    source источник


Ответы (1)


Краткий ответ: К сожалению, вы не можете сохранить форму таким образом. Если ваша форма не содержит поля ForeignKey или m2m (или вы сами их контролируете, например, с помощью поля автозаполнения и т. д.), вы можете обрабатывать объект после формы:

_obj = _form.save(commit=False)
_obj.save(using=_db_alias)

Длинный ответ: если вы хотите, чтобы модельная форма вела себя как обычная с ForeignKeys и m2m-полями, что-то вроде:

# The form's foreign_keys and m2m-fields get the data from the db_alias database
# and evertyhing is sdisplayed correctly on the template.
_form = myModelForm(request, db_alias=_db_alias)

# The form saves to the correct DB and foreigns & M2ms are matched correctly in this DB
# _form.save()

Хотя это было бы идеально, вы просто не можете использовать это поведение. Есть много хуков БД, которые вам нужно изменить в коде Django, чтобы это заработало. Что я сделал, так это создал новый класс modelform из базовой modelform и получил (частичные) функциональные возможности, описанные ранее.

Надеюсь, это поможет, а также надеюсь, что скоро появится лучшее решение.

person Ubay G. Oramas    schedule 28.02.2011
comment
Спасибо за ваш ответ. Надеюсь, скоро станет лучше. - person pista329; 01.03.2011