2

Django Filter で OR ステートメントを作成する方法を知っている人はいますか? Q オブジェクトを使用する必要があるかどうかはわかりません。ある種の OR パイプが必要だと思いましたが、これは正しくないようです。

    filter_mfr_method = request.GET.getlist('filter_mfr_method')
    for m in filter_mfr_method:
        designs = designs.filter(Q(mfr_method = m) | m if m else '')
        # Or should I do it this way?
        #designs = designs.filter(mfr_method = m | m if m else '')

私はこれが欲しい:

SELECT * FROM table WHERE mfr_method = 1 OR mfr_method = 2 OR mfr_method = 3

編集:これが機能したものです

    filter_mfr_method = request.GET.getlist('filter_mfr_method')
    list = []
    for m in filter_mfr_method:
        list.append(Q(mfr_method = m))

    designs = designs.filter(reduce(operator.or_, list))
4

2 に答える 2

1

私が以前に使用したもの:

qry = None
for val in request.GET.getlist('filter_mfr_method'):
    v = {'mfr_method': val}
    q = Q(**v)
    if qry: 
        qry = qry | q
    else: 
        qry = q

designs = designs.filter(qry)

これは、私のクエリ ビルダーの 1 つから取得したものです。

于 2013-04-16T15:47:30.103 に答える