0

私は日付フィールドを持っていますeditable=False

フィールドはdatetime.now()作成時に入力されます。

管理者にはeditable=Falseフィールドが表示されないため、カスタム管理者を作成しました。

カスタム管理者は、次のフィールドを持つフォームを使用します:

date = forms.DateTimeField(widget=widgets.AdminSplitDateTime, required=False)

私が達成したいのはこれです:

  1. ユーザーはこのフィールドに触れることができません (したがって、editable=False)
  2. 管理者はフィールドの値を変更できますが、強制されることはありません (これが私が持っている理由ですrequired=False)
  3. 管理者は、フィールドの現在の値を確認できます。

私は(3)を達成できていません。エントリを作成し、データベースを調べたところ有効な日付であることがわかりました。しかし、管理パネルから開くと、日付ウィジェットが空です。

日付ウィジェットにフィールドの現在の値を表示させる方法はありますか?

4

1 に答える 1

2

まず、 Admin ではデフォルトでmodels.DateTimeField使用widgets.AdminSplitDateTimeされるため、明示的に指定する必要はありません。

通常のスタッフの場合readonly_fields、日付フィールドが変更されないようにするために使用します。

管理者は、別の変更フォームをレンダリングして、日付フィールドの変更を許可します。Django 1.4 では、オーバーライドすることで簡単に実行できますModelAdmin.get_readonly_fields()

class YourModelAdmin(admin.ModelAdmin):
    def get_readonly_fields(self, request, obj=None):
        # we don't use self.readonly_fields anymore
        if request.user.is_superuser:
            return ()
        return ['date']
于 2012-08-04T05:41:21.897 に答える