はじめに(前提)
- Django公式チュートリアルのソースを元にしています
- 管理画面側で作成した入力フォームに、デフォルト値として現在の日付を設定する方法をまとめています
記事の作成目的
- Django初心者の方向けのため
- 本情報を調べるのに時間がかかったため
実装の経緯
- 公式チュートリアルで、質問の公開日付フォームを非表示にした
- フォームが非表示かつデフォルト値が未設定だと、入力を忘れてしまうことが多い
- エラーメッセージが表示されるので致命的ではないが、やや面倒
モデル
- Question
- Choice
実装
管理画面に指定のメソッドを追加する。現在日付をデフォルト値として表示
Admin.py
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {"fields": ["question_text"]}),
("Date information", {"fields": ["pub_date"]}),
]
inlines = [ChoiceInline]
list_display = ("question_text", "pub_date")
list_filter = ["pub_date"]
search_fields = ["question_text"]
"""
以下メソッドを追加
引数requestは未使用だが、指定が必須
"""
def get_changeform_initial_data(self, request = None):
now = dateformat.format(timezone.now(), "Y-m-d")
return {"pub_date": str(now)}
実際の表示
参考
終わりに
- フォームにデフォルト値を設定したいだけだったが、想定より調査に苦労した
- もっと良い方法または別の方法が見つかり次第、更新予定