2010-11-29 19 views
0

モデルフィールドでバックアップされていない永続モデルプロパティがあるとします。このフィールドを管理インタフェースで編集するにはどうすればよいですか?Djangoの追加フィールドadmin interfaces

例のセットアップ:

# models.py 

# appropriate imports... 

class MyModel(Model): 
     # regular fields. 
    foo = CharField(max_length=50) 
    bar = BooleanField() 
    # ... 

     # custom property, backed by a file. 
    def _get_meh (self): 
     return ... # read from file 
    def _set_meh (self, value): 
     ... # write to file. 
    meh = property(_get_meh, _set_meh) 

mehの値が実際にディスク上のファイルに格納されているパスですfooの値に依存します。私はmehの値を管理インターフェースから編集できるようにしたいと思います。

# admin.py 

# appropriate imports... 

class MyModelAdmin(ModelAdmin): 
    # what do I put here? 

:場合には、誰かが私はDjangoのバージョン1.2.1を使用しています、依頼する必要がありますが、それはあなたのソリューションによって必要とされている場合、アップグレードが可能です。 Python 2.5上で動作するものは何でもできますが、これは私が実際にはアップグレードできません。

+0

追加ノートを「ジャンゴモデルの上書き保存します」この特定の値は、私が変更できない/変更したくない他のソフトウェアによって取得されるためです。 –

+0

tinsukEのコメントで参照されているページにアクセスできます:http://web.archive.org/web/20120828045035/http://www.hindsightlabs.com/blog/2010/02/11/adding-extra-fields- to-a-model-form-in-djangos-admin/ –

答えて

1

これを見てください: http://www.scribd.com/doc/68396387/Adding-extra-fields-to-a-model-form-in-Django%E2%80%99s-admin-%E2%80%93-Hindsight-Labs を(この1つは、オフラインhttp://www.hindsightlabs.com/blog/2010/02/11/adding-extra-fields-to-a-model-form-in-djangos-admin/を行ってきました)

基本的に、あなたはMyModelFromを作成しますがforms.ModelFormからサブクラス化:

  1. 追加のmehフィールドをMyModelFrom定義に追加します。
  2. MyModelFromのコンストラクタをオーバーライドし、モデルインスタンスがフォームに渡された場合にself.initial mehプロパティを設定します。
  3. MyModelFromのsaveメソッドをオーバーライドし、フォームフィールドに基づいてモデルインスタンスのmehプロパティを設定します。

この方法で、MEHプロパティが正しくモデルで満たされるだろうが、あなたはまた、実際にあなたのディスクファイルにこの値を永続化するために、mymodelのsave()メソッドをオーバーライドする必要があります:

(Googleのために`meh`が保存されています)...私が10以上の担当者を得るまで、私は答えあたりのリンクより多くを投稿することができないようで、SRY、

乾杯、

+0

この問題の最新情報を残念にお詫び申し上げます。これは私が探していたもののように見えます。ヒントをありがとう! –

+0

@tinsukE悪いリンク、FYI –

+0

試してみてください:http://web.archive.org/web/20120828045035/http://www.hindsightlabs.com/blog/2010/02/11/adding-extra-fieldsモデル・フォーム・イン・ジャンゴ・アドミニストレーター/クレジットは@GarethJamesに行きます。 – Maerlyn

1

Nyジャンゴの知識はそれほど素晴らしいものではありませんが、どれくらい複雑になっているかによっては、このようなことが多くのハッカーなしで簡単にできるかどうかはわかりません。

Add MyModelページに追加する場合は、適切な管理用テンプレートを編集できます。あなたのテンプレートディレクトリにあるので

、のようなものを作成:

admin/app_label/MyModel/change_form.html 

を次に基本テンプレートを拡張し、独自のコンテンツを追加します。

{% extends "admin/change_form.html" %} 

{% block something_you_want_to_override %} 
    <p>Your HTML goes here</p> 
{% endblock %} 

は本当にあなたがこのカスタムを得ることができる方法はありません実際のDjangoフィールドにフィールド?確かに、モデルのsave()メソッドをオーバーライドして、そのようにすることができますか?またはpre_save信号を使用しますか?

乾杯、 ビクター

+0

これはクールなように聞こえる。私もカスタムフィールドを実装していますが、関連するファイルのパスは別のフィールドの値に依存するため、そのように実装するのは難しいです。 –

+0

明日あなたのソリューションを試してみます。きれいな結果が得られれば、私はこれを答えとして受け入れます。 –

関連する問題