9

モデルにDjangoの汎用createviewを使用しました

from myproject.app.forms import PersonForm
class PersonMixin(object):
    model = Person
    form_class = PersontForm

class PersonCreateView(PersonMixin, CreateView):
    pass

これは、カスタムフォームでPersonの作成ビューを表示するのに最適です。ただし、値を事前入力したい形式のフィールドがあります。私はこの答えを見つけました:クラスベースのジェネリックビューでmodelformに初期値を設定します

ただし、事前に入力された値は、request.userのプロファイルから取得されます。PersonCreateViewでリクエストにアクセスし、それをフォームに渡すにはどうすればよいですか?

4

2 に答える 2

38

どのクラスメソッドでも、self.requestを使用してリクエストにアクセスできます。したがって、ユーザープロファイルにはself.request.userでアクセスできます。

指定したリンクに基づいて、get_initialメソッドでself.request.userを使用して値を設定できるようになります。

すなわち。

def get_initial(self):
    return { 'value1': self.request.user }
于 2012-11-01T15:22:43.073 に答える
3

まず、そこでミックスインを使用する必要はありません。で指定するだけform_classですPersonCreateViewform_classモデルは(のサブクラスであると仮定して)ですでに指定しているため、モデルも必要ありませんModelForm

get_initialリクエストの取得元については、クラスベースのビューがリクエストをオブジェクトに保存するため、またはの中でself.request.userを実行できますget_form_kwargs

于 2012-11-01T15:28:26.560 に答える