29

他のフィールドに基づいて管理フォームのフィールドを事前入力できることは知っています。たとえば、タイトル フィールドに基づいて自動的に入力されるスラッグ フィールドがあります。

ただし、日付に基づいて他の自動事前入力も行いたいと思います。たとえば、URL フィールドがあり、自動的にhttp://example.com/20090209.mp3に設定したいとします。20090209 は YYYYMMDD です。

また、"Hello my name is author" のようなテキスト フィールドが自動的に表示されるようにしたいと考えています。ここで、author は現在のユーザーの名前です。もちろん、その人がフィールドを編集できるようにしたいです。要点は、完全に自動化されたフィールドを持つだけでなく、ユーザーが管理フォームに簡単に入力できるようにすることです。

4

7 に答える 7

45

GET を介していくつかの値を事前設定できることはわかっています。次のようになります。

http://localhost:8000/admin/app/model/add/?model_field=hello

日付フィールドに問題がありましたが、これが役立つかもしれません。

于 2010-06-04T10:47:17.813 に答える
27

私は最近、この目的のためにDjangoのModelAdmin.get_formメソッドを使用しました。

class MyModelAdmin(admin.ModelAdmin):
    def get_form(self, request, obj=None, **kwargs):
        form = super(MyModelAdmin, self).get_form(request, obj, **kwargs)
        form.base_fields['my_field_name'].initial = 'abcd'
        return form

base_fieldsを直接操作しているため、副作用に注意する必要があります。

于 2013-01-14T16:41:46.717 に答える
13

Django の組み込みの prepopulated_fields 機能は、スラッグ化するためにハードコードされており、より一般的な目的には実際には使用できません。

事前入力を行うには、独自の Javascript 関数を作成する必要があります。管理ページに含める最良の方法は、カスタム Form またはWidgetの内側の Media クラスに含めることです。次に、 ModelAdmin サブクラスをカスタマイズして、カスタム フォームまたはウィジェットを使用する必要があります。最後に、onchange ハンドラーを登録し、どのフィールドからデータを入力するかを伝えるために、事前入力された各フィールドと共にインライン Javascript をレンダリングする必要があります。これをカスタム ウィジェット経由でレンダリングします。適切で宣言的なものにするために、カスタムの ModelAdmin 属性 (prepopulated_fields と同様) を使用し、ModelAdmin.formfield_for_dbfield をオーバーライドしてウィジェットを作成し、どのフィールドから事前入力する必要があるかについての情報を渡すことができます。

この種の管理者ハッキングはほとんどの場合可能ですが、(この複雑な要約からわかるように) 単純なことはめったになく、特にコードを適切にカプセル化する努力をしている場合はそうです。

于 2009-02-10T11:53:41.170 に答える
4

選択したフォーム フィールドに置き換えることで、デフォルトの django admin フィールドをオーバーライドできます。

これを確認してください: カスタム検証を管理者に追加します

于 2009-02-09T23:05:45.577 に答える
3

また、「こんにちは、私の名前は著者です」のようなもので自動的に始まるテキストフィールドが欲しいです。

http://docs.djangoproject.com/en/dev/ref/models/fields/#defaultでドキュメントをチェックしてください

モデルにCharField()またはTextField()を含めることができ、このオプションを設定すると、デフォルトのテキストが設定されます。'default'は呼び出し可能な関数にすることもできます。

次のようなもの:models.CharField(max_length = 250、default = "Default Text")

于 2009-02-09T22:45:34.190 に答える
2

slug 処理は javascript で行われます。

そのため、管理者のテンプレートをオーバーライドしてから、フィールドに JavaScript を入力する必要があります。日付のことは些細なはずですが、ログインしているユーザー名をスクリプトに取得する方法がわかりません (非常に難しいとは思いませんでしたが、ドリフトが発生します:)。

于 2009-02-09T21:52:27.313 に答える