0

エンドユーザーがトランザクション データをフィルタリングできるフォームを作成しようとしています。「支払い方法」のフィルターがあります。

For Example: credit card, cash, check etc. 

何らかの理由で、結果がフィルタリングされません (何も表示されません)。フォームが利用可能な選択肢からフィルター値を変更することに気付きました。

For Example: the "cash" choice becomes [u'cash']. 

フィルターに選択オプションを直接入力すると、機能します。

For Example: Transactions.objects.filter(payment_method__exact="cash")

これと関係があるかどうかはわかりません...どうすればフィルターを機能させることができますか?

モデル:

class QueryForm(forms.Form):
    payment_method = forms.MultipleChoiceField(choices=PAYMENT_TYPE)

見る:

def findtransation(request):
    qf = QueryForm()
    if request.method == "POST":
        qf = QueryForm(request.POST)
        if qf.is_valid():
            p = qf.cleaned_data['payment_method']
            results = Transactions.objects.filter(payment_method__exact=p)
            return render_to_response('testdb/results.html', {'results': results, 'query_form': qf,}, context_instance=RequestContext(request))
    return render_to_response('testdb/results.html', {'query_form': qf,}, context_instance=RequestContext(request))
4

2 に答える 2

1

payment_methodあなたのフィールドをQueryFormプレーンに変更してみてくださいChoiceField

class QueryForm(forms.Form):
    payment_method = forms.ChoiceField(choices=PAYMENT_TYPE)

Aforms.MultipleChoiceFieldは文字列のリストを返します。モデルは表示されませんでしTransactionsたが、そのpayment_methodフィールドはおそらくCharField. CharFieldから返されたリストを使用して、Transactionモデルでをフィルタリングしようとしていると思いますQueryForm.MultipleChoiceField。(文字列 "cash" をハードコーディングすると正常に動作します)

于 2012-05-03T16:43:26.583 に答える
1

実際に複数のアイテムを選択できるようにするために MultipleChoiceField を使用した場合 (たとえば、支払方法が現金またはカードのトランザクションを検索する場合)、フィールドをそのままにして、フィルターを変更することができます。__inの代わりに使用するには__exact:

results = Transactions.objects.filter(payment_method__in=p)
于 2012-05-03T16:54:53.703 に答える