2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Django] 管理画面のフォームにデフォルト値を設定する

Last updated at Posted at 2023-05-08

はじめに(前提)

  • 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)}

実際の表示

スクリーンショット 2023-05-08 10.24.29.png

参考

終わりに

  • フォームにデフォルト値を設定したいだけだったが、想定より調査に苦労した
  • もっと良い方法または別の方法が見つかり次第、更新予定
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?