Сохранение Django ModelForm с использованием параметра db_alias "using" - PullRequest
0 голосов
/ 10 февраля 2011

Можно ли сохранить данные объекта ModelForm с db_alias, отличным от "default"

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

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

1 Ответ

0 голосов
/ 28 февраля 2011

Краткий ответ: К сожалению, вы не можете сохранить форму таким способом. Если ваша форма не содержит полей 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, чтобы это работало. Что я сделал, так это создал новый класс модели формы из базовой модели и получил (частично) функциональность, описанную ранее.

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

...