2016-07-11 20 views
0

最近、クラスベースのビューを使用し始めましたが、正しいドロップダウン値を選択する正しい方法はまだ分かりません。これは動作しますがDjango UpdateView:選択した値にドロップダウンを設定する

class SomeUpdate(PermissionRequiredMixin, UpdateView): 
    model = SomeModel 
    form_class = SomeCreateForm 
    permission_required = 'app.some_model' 
    template_name_suffix = '_update_form' 
    raise_exception = True 

    def form_valid(self, form): 
     from_page = self.request.GET.get('from') 
     if from_page: 
      self.success_url = self.request.GET.get('from') 
     else: 
      self.success_url = "/somewhere/" 
     return super(SomeUpdate, self).form_valid(form) 

、それはまた、それは本当に不快に使用すること、ドロップダウンが選択されていない滞在などCharFields塗りつぶし:

は、私はこのような単純なUpdateViewを持っています。私が望むのは、オブジェクトの現在選択されているフィールドが、編集するときに既に選択されているということです(UpdateView)。

formは、フィールドが定義された標準ModelFormです。フィールド自体はForeignkeyです。

私はget_initial(self)などを使用してドロップダウン値を設定しようとしましたが、成功しませんでした。

+0

モデルのインスタンスで作業している場合(UpdateViewの場合)は、指定したモデルの右のドロップダウン値がすでに入力されているはずです。表示しているインスタンスに、指定された外部キーに有効な値が設定されていますか? – Sayse

+0

はい、それは正しいはずです。もう一度チェックして、選択した外部キ​​ーにアクセスできます。 UpdateViewも管理パネル経由でも、いずれのエラーもスローされません。しかし、どちらも選択していない。一方、ManyToManyフィールドは関係を適切に表示します。 –

答えて

0

私は私の問題のための実用的なソリューションを見つけました:

クラス内:

def get_initial(self): 
    initial = super(MyObjectUpdate, self).get_initial() 
    try: 
     field1 = self.get_object().field1 
     field2 = self.get_object().field2 
    except: 
     pass 
    else: 
     initial['field1'] = field1.pk 
     initial['field2'] = field2.pk 
    return initial 

これは私の問題を修正し、UpdateView拡張クラスは、今で選択された正しい値でフォームを編集するために私を返します。そのドロップダウン。私はそれが正しい/最善の方法であるかどうかわからない。

関連する問題