前提・実現したいこと
超初心者です。
djangoで"default"以外のDBをgenericViewのCreateViewで更新したいです。
関数ベースでは作成することが出来たのですが、これをCreateViewで作成し直さなければならなくなりました。
CreateViewでの書き方を教えてください。
環境
django:2.2
python:3.8
mysql:14.14
python
1●settings.py 2DATABASES = { 3 'default': { 4 "ENGINE": "django.db.backends.mysql", 5 "NAME": "db1", 6 (省略) 7 } 8 'db2': { 9 "ENGINE": "django.db.backends.mysql", 10 "NAME": "db2", 11 (省略) 12 } 13 } 14
python
1●view.py 2def create(request): 3 if request.method == "POST": 4 form = PersonForm(request.POST) 5 6 if form.is_valid(): 7 save_data = form.save(commit=False) 8 save_data.save(using = 'db2') 9 10 return redirect('person_detail', pk=save_data.pk) 11 else: 12 13 form = PersonForm() 14 return render(request, 'myapp/form.html', {'form': form})
↑動作確認済み
発生している問題・エラーメッセージ
ProgrammingError at /myapp/PersonCreate/
(1146, "Table 'django.myapp_person' doesn't exist")
該当のソースコード
本当に単純ですが、書き方がわからず、CreateViewの中にdef create を入れてみました。
●view.py class PersonCreate(generic.CreateView): template_name = 'myapp/form.html' model = Person form_class = PersonForm def create(request): if request.method == "POST": form = PersonForm(request.POST) if form.is_valid(): save_data = form.save(commit=False) save_data.save(using = 'db2') return redirect('person_detail', pk=save_data.pk) else: form = PersonForm() return render(request, 'myapp/form.html', {'form': form}) def get_success_url(self): return reverse('person_detail', kwargs={'pk': self.object.pk})
やはり全くdef create は無視されているようです。
試したこと
db1にPersonテーブルをコピーし、試したところ上記エラーは出ず、やはりdb1に入力されていました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。