2012-02-15 5 views
0

リクエストのデータに基づいてフォームフィールドの動作を変更する方法は、特にDjango Adminに関連しています。たとえば、リクエストデータ(POSTやセッション変数など)に基づいて、管理者のフィールドを復号化したいとします。リクエストに基づいてDjangoの管理者がto_pythonの出力を変更しました

私はdjango/contrib/admin/options.pyのchange_viewメソッドをオーバーライドしてみることを考えています。これはリクエストにアクセスできるからです。しかし、私はどのようにフィールドの値がフィールドの表示方法に影響するか分からないのは、要求のいくつかの値に依存します。要求に正しい値がある場合は、フィールド値が表示されます。それ以外の場合、フィールド値は "NA"のような値を返します。

私の考えでは、どういうわけかto_python()メソッドにリクエストの値を渡せば、フィールドの表示方法に直接影響する可能性があります。リクエストの値をフォームに渡して、何とかフィールドに入力してみてください。どのように私はこれに近づくかもしれない提案?

読んでいただきありがとうございます。 admin.py

class MyModelAdmin(models.ModelAdmin): 
    class Meta: 
     model = MyModel 

def change_view(self, request, object_id, extra_context=None): 
    .... # Perhaps this is where I'd do a lot of overriding? 
    .... 
    return self.render_change_form(request, context, change=True, obj=obj) 
+0

明確にするために、リクエスト内の何かに応じて、(管理者経由で)特定のモデルの特定のフィールドの値を表示したいのですか? –

+0

はい、正しいです。 –

+0

私が明確にすべきもう一つのポイントは、保存された価値を変えたくないということです。その値の表示が変わるだけです。 –

答えて

1

でmodels.py

class MyModel(models.Model): 
    hidden_data = models.CharField() 

私はこれをテストしていませんが、あなたはちょうどにあなたのコードにこっそりModelAdminrender_change_form方法を上書きする可能性がchange_viewが処理され、実際のテンプレートがレンダリングされたときのフィールド値を変更する

class MyModelAdmin(admin.ModelAdmin): 
    ... 
    def render_change_form(self, request, context, **kwargs): 
     # Here we have access to the request, the object being displayed and the context which contains the form 
     form = content['adminform'].form 
     field = form.fields['field_name'] 
     ... 
     if 'obj' in kwargs: 
      # Existing obj is being saved 
     else: 
      # New object is being created (an empty form) 
     return super(MyModelAdmin).render_change_form(request, context, **kwargs) 
+0

そのrender_change_formメソッドについて見ていきます。管理者のための良い方法のようだ。このアドバイスをいただきありがとうございます。 –