2011-08-02 13 views
0

モデルに関係なく、毎回同じテンプレートを利用するDjango用のクラスベースのビューを作成しようとしています。その目的は、各モデルにurls.pyエントリを追加して、ビューやテンプレートについて気にする必要がないことです。Django - クラスベースのビューからオブジェクトフィールドと名前にアクセスする

これはフォームを表示するために使用され、フォームフィールド名はモデルタイプに依存するため、ビューレベルでモデルを調べ、フィールド名を抽出して汎用テンプレートに渡す必要があります。テンプレートは、オブジェクトのフィールド名と値に基づいてフォームを生成します。

私は本当にこれで苦労しています。

def get_context_data(self, **kwargs): 
    context = kwargs 
    context_object_name = self.get_context_object_name(self.object) 
    if context_object_name: 
     context[context_object_name] = self.object 
    #add some custom stuff on too 
    tempdict = [(field, field.value_to_string(self)) for field in self.object._meta.fields] 
    #context.update({'datafields' : tempdict}) 
    context.update({ 'blarg': 'tester!!'}) 
    return context 

次のように現時点では私は問題をhaivngよどこself.object._meta.fieldsビットがget_context_dataをオーバーライドに取り組んでいます。私は現在のモデルにアクセスする方法について頭を悩ますことはできません。私はビューでこれをやっているよ、私はミックスインにもっともっと運があると思う?

お時間をいただきありがとうございます。

O

答えて

0

私はあなたがこのことについて間違った道を進んでいると思います。 Djangoは既にモデルからフォームを作成する方法を知っており、フォームは自分自身を出力する方法を知っています。したがって、ModelFormMixinを使用して標準の汎用ビューを作成することができます。モデルのフィールドのフォームフィールドを取得するために何もする必要はありません。

唯一の難しい点は、複数のモデルで1つのビューを機能させることです。したがって、モデルを明示的にビュークラスで宣言するのではなく、おそらくget_objectをオーバーライドすることによって、モデルを動的に渡すいくつかの方法を工夫する必要があります。

+0

返信ありがとうございました。私の問題はフォーム自体ではなく(たとえば、オブジェクトのフィールドと値の表を表示したいというふうに思うかもしれませんが)、すべてのデータに対して機能するテンプレートを作成したいという事実がありますあなたの2番目の段落で言及しているように、 'get_object'をオーバーライドして、私が何を思いつくのか見てみましょう - 歓声! – ollyb

+0

'get_object'をオーバーライドし、代わりに辞書を返すようにしました。手動でコンテキストに追加され、レンダリングされ、それはすべての良い探している:)歓声 – ollyb

関連する問題