前提・実現したいこと
Python,DjangoでWEBシステムを開発しています。
各フィールドにデフォルトの値を持たせた状態で、CreateViewテンプレートのフォームを表示したいです。
CreateViewで使用するForm classが参照するmodel classで、デフォルト値の設定はできると思いますが、表示するユーザーや各条件によって変わるようにしたいため、この方法は利用できません。
*動きのイメージは、DetailView から UpdateView へ遷移した際に、あらかじめフォームにデフォルトの値が入る感じです。
今回は、DetailView から CreateView へ遷移する際に、DetailViewテンプレートで表示されていた値を、CreateViewテンプレートのファーム内のデフォルト値として表示し、DBへ値を保存したいです。
しかし、DetailView から CreateView へ遷移となり、この場合PKの受け渡しができません。
このような場合、どのような方法で対応できるかご教授いただけないでしょうか?
試したこと
以下の方法をためしましたが、うまく表示されません。
views.py
python
1class CreateView(LoginRequiredMixin, generic.CreateView): 2 model = sampleDb 3 template_name = 'history.html' 4 form_class = HistoryForm 5 success_url = reverse_lazy('main:history') 6 7 def form_valid(self, form): 8 history = form.save(commit=False) 9 history.user = self.request.user 10 history.save() 11 messages.success(self.request, '作物情報を登録しました') 12 return super().form_valid(form) 13 14 def form_invalid(self, form): 15 messages.error(self.request, "作物情報の登録に失敗しました。") 16 return super().form_invalid(form) 17 18 def get_context_data(self, **kwargs): 19 data = "DetailViewのDBからSQL文でデータと取得" 20 context = super().get_context_data(**kwargs) 21 context['data'] = data 22 return context
history.html
html
1<div> 2 {{ form.memo data }} 3</div>
通常は{{ form.memo data }}として、表示されるフォーム内に、デフォルトのデータを表示させたい。
補足情報(FW/ツールのバージョンなど)
●開発環境
- Python: 3.7.5
- Django: 2.2.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。