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的. (当您对字符串“cash”进行硬编码时,它可以正常工作)TransactionQueryForm.MultipleChoiceField

于 2012-05-03T16:43:26.583 回答
1

如果您使用 MultipleChoiceField 是因为您确实希望能够选择多个项目 - 例如,您想要搜索支付方式为现金或卡的交易-您可以保持该字段不变,但更改过滤器使用__in而不是__exact

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