0

プロジェクトに検索ボックスがあります。ユーザーは任意のキーワードを入力でき、ModelFormは、明示的にフィルタリングするように指示したフィールドをフィルタリングします。フォームでは、次のコードを使用します。

def get_matching_siniestros(self):
    if self.cleaned_data['keywords'] is None:
        return None
    matching = []
    for kw in self.cleaned_data['keywords']:
        numero_ajuste = Siniestro.objects.filter(
            numero_ajuste__icontains=kw
        )

        nombre_contratante = Siniestro.objects.filter(
            poliza__contratante__nombre__icontains=kw
        )


        matching = chain(
            numero_ajuste, 
            nombre_contratante,
            matching
        )

    # verify not repeated Siniestro
    non_rep_siniestros = []
    for siniestro in matching:
        if siniestro not in non_rep_siniestros:
            non_rep_siniestros.append(siniestro)

    return non_rep_siniestros

私がやりたいのは、モデル内の任意のCharFieldで、また可能であればネストされた関係の任意のCharFieldでプログラム的にフィルタリングすることです。この例では、SiniestroにはFK to polizaがあり、polizaにはFKtocontratanteがあります。

4

1 に答える 1

1

すべてのフィールドを繰り返し処理して、好きなことを行うことができます。例:

[process(field) for field in model._meta.fields if field.__class__ == CharField]

ここで、プロセスは関数、または必要なものであれば何でもかまいません。

とは言うものの、あなたが関与しようとしている複雑さは厄介になるに違いないことを本当に指摘する必要があります。IMO、django-haystackを見てください。索引付けが進むべき道です。

于 2012-11-23T16:05:36.480 に答える