过滤两个或多个模型之间的查询集以在 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 方法中,如何以相同的形式搜索 InfoPredioGeneral
和 Propietario
?例如过滤器 nombre_predio 精确到 "predio proof" 而 tipo_identificacion
精确到“123”?如您所见,Propietario
有一个 ForeignKey
到 InfoPredioGeneral
您正在寻找多对一关系
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")
我在 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 方法中,如何以相同的形式搜索 InfoPredioGeneral
和 Propietario
?例如过滤器 nombre_predio 精确到 "predio proof" 而 tipo_identificacion
精确到“123”?如您所见,Propietario
有一个 ForeignKey
到 InfoPredioGeneral
您正在寻找多对一关系
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")