2016-03-29 8 views
0

/foo/1/bar/createのようなURLスキームを使用していますが、Fooオブジェクトの外部キーを持つBarオブジェクトをID 1で作成しています。外部キーフィールドはFooBareditable=Falseに戻る。 Django docsDjangoジェネリックCreateViewをfield editable = Falseで使用する

は、一般的なCreateViewを使用して固有の任意のアドバイスをフィールドeditable=False、またはフォームから除外しましたが、それはsave()に必要なフィールドを扱う上でいくつかの一般的なアドバイスを与えることはなく。

私のCreateBarViewはすでにURLを介してFooというIDを取得しているため、すでにビューのself.kwargsに入っています。私は物事をDRYに保つために一般的なビューを採用しようとしています。

DjangoのGeneric Viewsでこれを行う方法はありますか?特に、フォームをサブクラス化する必要はありませんか?

注:get_initial()を上書きすると機能しません。ドキュメントがサポートしていると思います。

編集:Djangoのジェネリックビュー上で読んでDjangoの1.9

答えて

0

、私は一般的なdocsに従うならばget_form_kwargs経由get_form()をオーバーライドすることは最も簡単であるかもしれないように見える、例えば、

class FormMixin(...): # from django.views.generic.edit 

    def get_form(self, form_class=None):           
     """                  
     Returns an instance of the form to be used in this view.     
     """                  
     if form_class is None:             
      form_class = self.get_form_class()         
     return form_class(**self.get_form_kwargs())  

ので、

class CreateBarView(...): 

    def get_form_kwargs(self): 
     kwargs = super(CreateBarView, self).get_form_kwargs() 
     kwargs['instance'] = Bar(foo_id=self.kwargs['foo_id']) 
     return kwargs 
関連する問題