質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

5158閲覧

Django CreateViewテンプレートのフォームにデフォルト値を表示させたい

tomaa

総合スコア84

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/03/28 05:40

編集2020/03/28 05:43

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

こちらのサイトを参考にして、CreateViewテンプレートのフォームにデフォルト値を表示させる事ができました。
【Django】FormViewでtemplate上のフォームに初期値を入れる

しかし、実現したい事に載せておりました
「DetailView から CreateView へ遷移となり、この場合PKの受け渡しができません。」
という動かし方がわからないため、こちらの内容を別の質問として投稿しました。
Django DetailViewで持っているint:pkの値をCreateViewへ渡したい

views.py

python

1def get_initial(self): 2 initial = super().get_initial() 3 initial["memo"] = "初期値" 4 return initial

template

html

1<div> 2    {{ form.memo }} 3</div>

投稿2020/03/28 09:01

編集2020/03/28 09:34
tomaa

総合スコア84

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問