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 有一个 poliza 的 FK 和 poliza 有一个 contratante 的 FK。

4

1 回答 1

1

您可以遍历每个字段并做任何您喜欢的事情,例如:

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

其中 process 可以是一个函数,或者你需要的任何东西。

也就是说,我真的应该指出,你试图涉及的复杂性必然会变得混乱。IMO,看看django-haystack。索引应该是要走的路。

于 2012-11-23T16:05:36.480 回答