过滤两个或多个模型之间的查询集以在 Django 中搜索表单

Filter queryset between two or more models for search form in django

我在 Django 中构建一个搜索表单,我用过滤器查询集来做,这个表单就像一个 "advance search form",我的意思是,表单可以有两个以上的输入,但问题是每个输入对应的一个不同模型的字段,我有这个并且如果表单只有一个模型的一个输入就可以正常工作:

def post(self,request,*args,**kwargs):
        buscar_predio = request.POST['nombre_predio']
        query1 = InfoPredioGeneral.objects.filter(nombre_predio__iexact=buscar_predio)
        if query1:
            ctx  = {'predio':query1}
            return render(request,'resultados_busqueda.html',ctx)
        else:
            return render(request,'resultados_busqueda.html')

如果我有这个型号:

class InfoPredioGeneral(models.Model):
        nombre_predio = models.CharField(max_length=30)

class Propietario(models.Model):
        predio = models.ForeignKey(InfoPredioGeneral,blank=True,null=True,related_name='predio_propietario+')
        tipo_identificacion = models.ForeignKey(TipoIdentificacion,related_name='tipo identificacion+',blank=True,null=True)

在 post 方法中,如何以相同的形式搜索 InfoPredioGeneralPropietario?例如过滤器 nombre_predio 精确到 "predio proof" 而 tipo_identificacion 精确到“123”?如您所见,Propietario 有一个 ForeignKeyInfoPredioGeneral

您正在寻找多对一关系

https://docs.djangoproject.com/en/1.8/topics/db/examples/many_to_one/

您已经将 related_name 设置为 "predio_propietario+" 并且末尾带有“+”,这意味着与该模型没有向后关系

有你的例子:

queryset = Propietario.objects.filter(predio__nombre_predio__iexact=request.POST['nombre_predio'])

额外:

class C(models.Model):
    c_text = models.CharField(max_length=100)

class B(models.Model):
    b_text = models.CharField(max_length=100)

class A(models.Model):
    b = models.ForeignKey(B)
    c = models.ForeignKey(C)

查询集将如下所示:

queryset = A.objects.filter(b_btext__isexact="your b text", c_ctext__isexact="your c text")