2017-08-24 16 views
0

すべて、 Modelchoicefieldクエリセット混乱

私はジャンゴに新たなんだと今のところかなり良いやっているが、この1つは私が困惑しています。私はModelChoiceFieldを同じ名前のレコードの数に利用しようとしています。 PostgreSQLを使用しているので、別個のコマンドを使用する必要があると判断でき、完全に動作しています。私のドロップダウン内のレコードはすべて、各レコードの1つのバージョンに切り捨てられています。しかし、特定のレコードのすべてのバージョンを取得しようとすると、その場所が失われてしまいます。 DetailViewを使って別のものを使用しないと各レコードの詳細を取得できますが、実際にはmodelchoiceフィールドの後に各レコードのすべてのバージョンを画面に表示しようとしています。私は最終的に私のテンプレートを経由してビューに画面上のクエリセットを取得しようとしています

class History(forms.Form): 

     dropdown = forms.ModelChoiceField(queryset=History.objects.all()) 

     def __init__(self, user, *args, **kwargs): 
      super(History, self).__init__(*args, **kwargs) 
      self.fields['dropdown'].widget.attrs['class'] = 'choices1' 
      self.fields['dropdown'].empty_label = '' 

      qs = History.objects.all().distinct('record_name') 
      self.fields['dropdown'].queryset = qs 

は、ここに私のフォームです。私はテンプレートでいくつかの異なるバージョンのコードを試しましたが、何も動作していないようです。 CBV DetailViewを区別せずに使用すると、すべてのレコードを詳細ビューで正常に取得できます。しかし、それは私がやろうとしていることではありません。テンプレートにquerysetコマンドのいくつかのバージョンを使用していますが、私のようないくつかの質問がありましたが、うまく動作しないようです。

{% for record in form.history.field.queryset %} 
etc. 
{% endfor %} 

私のDjangoテンプレートでは動作しないようです。すべての助けをいただければ幸いです!前もって感謝します!この場合

+0

私が正しくあなたの問題を理解している場合、データを表示しようとしていますあなたのドロップダウンボックスの現在の値に依存するレコード? –

+0

@Max Mはい、私がやろうとしていることです。ユーザーがドロップダウンボックスから選択した値を取得し、次の画面で同じ名前のレコードをすべて表示します。 –

答えて

0

私はあなたのURLのマッチングにあなたのドロップダウンフィールドの値を入れて

A)をお勧めしたいのいずれか。 See the django docs for named groups in URL。さらに、<current url>/<value of dropdown>にリダイレクトするドロップダウンフィールドにonchangeイベントを追加するか、次のページにリンクするボタン(存在する場合)の値を変更するだけです。 注意:このソリューションでは、ドロップダウンフィールドの値がのURL形式django's slugify might be useful for this)に一致するようにする必要があります。あなたの入力フォームや入力フィールドなどにあなたのドロップダウンフィールドを追加するには

または

B)。そして、あなたとあなたのドロップダウンの値を抽出することができます。

try: 
    dropdown_value = request.POST['dropdown-field-name'] # dict-error if field is not in request.POST 
except: 
    # some error actions 

あなたはあなたのクエリセットにフィルタとしてこの値を追加することができます。

def get_queryset(self, dropdown_value=None): 
    # ... 
    qs = qs.filter('field-name' = dropdown_value) # possibly no/wrong results if dropdown_value is corrupted or manipulated 
+0

@ Max M..私を助けてくれてありがとう。私はそれらの例を試してみて、何が起こるか見てみましょう。あなたの提案を見直す際に、私が思っていたものよりも少し進んでいます。例として、ドロップダウンリストにA、B、Cがあった場合は、そのうちの1つを選択してサブミットするようにしたいと考えていました。次に、次の画面は、Aのすべてのバージョンのリストになります(ユーザーがAを選択したと仮定します)。私はCBリストビューでこれを試しましたが、リスト全体を取得しました。あなたがAのエントリのリストを取得するために提案したもの以外の方法がありますか?クエリーセットのせいでできない? –

+0

[この質問](https://stackoverflow.com/a/40543879/8389244)を確認してください。それはあなたが探している答えを与えるかもしれない - またはあなたは私の提案の一つとそれを混ぜることができます。 –

+0

残念ながら、上記の提案のいずれも役に立ちません。私はModelChoiceFieldのto_field_nameオプションを見つけました。それは基本的に私にドロップダウンのレコードの名前を与えていますが、次の画面で同じ名前のレコードをすべて取得する方法を見つけることができません。私はそれを個別に取り除くことができますが、それは私がやろうとしていることではありません。基本的には、同じ名前のレコードの「リスト」を取得し、そのレコードをクリックして詳細を取得するだけです。私は全体のリストを得ることができるように思われるが、私が探しているサブセットではない。他のアイデア? –