我正在建立一个高级搜索表单。我正在使用过滤器查询集,但我需要将两个或更多模型传递给表单。我怎样才能实现它?到现在为止,我有这个但有一些麻烦:
def post(self,request,*args,**kwargs):
buscar_predio = request.POST['nombre_predio']
matricula = request.POST['matricula_mobiliaria']
propietario = request.POST['propietario']
query1 = Q(nombre_predio__iexact=buscar_predio)| Q(matricula_inmobiliaria__iexact=matricula)
query2 = Propietario.objects.filter(primer_nombre=propietario)
predio = InfoPredioGeneral.objects.filter(query1)
print(predio)
if predio:
ctx = {'r':predio}
return render(request,'resultados_busqueda.html',ctx)
else:
return render(request,'resultados_busqueda.html')
问题1:
query1
queryset工作正常,但有一点错误,正如你所看到的,它调用了两个字段但是当我通过两个字段进行搜索时只需要一个,我的意思是在nombre_predio
我放了一个有效的查询,并在matricula_inmobiliaria
一个不存在的数据,但无论如何给出结果。它假设如果我填写两个字段并且其中一个不存在,则不必显示任何结果。我怎么能证明这一点?
问题2:
如何在query2
加入predio
?
注意:Propietario对InfoPredioGeneral有一个ForeignKey。所以,我不知道是否可能在模板中渲染结果必须调用查找字段
以下是我如何在模板中呈现结果
{% for i in r %}
<tr>
<td>{{i.nombre_predio}}</td>
<td>{{i.coordenada_n}}</td>
<td>{{i.coordenada_w}}</td>
</tr>
{% endfor %}
我的模特:
class InfoPredioGeneral(models.Model):
user = models.ForeignKey(User)
fecha = models.DateField(auto_now=True)
coordenada_n = models.DecimalField(max_digits=100,decimal_places=8,blank=True,null=True)
coordenada_w = models.DecimalField(max_digits=100,decimal_places=8,blank=True,null=True)
class Propietario(models.Model):
predio = models.ForeignKey(InfoPredioGeneral,blank=True,null=True,related_name='predio_propietario+')
numero_identificacion = models.CharField(max_length=100,blank=True,null=True)
primer_nombre = models.CharField(max_length=100)
答案 0 :(得分:0)
对于您的查询1,您正在使用或,它将为您提供验证两个条件之一的条目。如果要验证这两个条件,请使用和
query1 = Q(nombre_predio__iexact=buscar_predio)& Q(matricula_inmobiliaria__iexact=matricula)
我不确定加入,但您可以直接在模板中访问外键。因此,如果您设置了适当的Propietarop,则可以直接访问模板中的InfoPredioGeneral而无需其他查询。像这样:
<td>{{i.predio.coordenada_n}}</td>
<td>{{i.predio.coordenada_w}}</td>