我正在尝试在Django上对我的数据库进行查询,但到目前为止我没有得到任何结果,我对此感到困惑。
说proyecto
是我需要查询的一种文档,然后我在模型上有这个:
class Proyecto(models.Model):
id_proyecto = models.IntegerField(primary_key=True) #integer NOT NULL, CLAVE PRIMARIA
nombre_proyecto = models.TextField(null=True) #text,
existente = models.BooleanField()
在这里,existente
是我在模板上的复选标记,因此,如果此复选标记处于活动状态,则将您指定的任何文档带入nombre_proyecto
字段。
forms.py:
class ProyectoForm(forms.Form):
nombre_proyecto = forms.CharField(widget=forms.TextInput())
existente = forms.BooleanField(required=False)
def clean(self):
return self.cleaned_data
然后,views.py:
def proyecto_view(request):
alerta=""
#existente = request.GET['existente']
#if existente is not None and existente != '':
if request.method == "POST":
form = ProyectoForm(request.POST)
if form.is_valid():
name =form.cleaned_data['nombre_proyecto'] #hay que verificar si el proyecto ya existe
if Proyecto.objects.count() > 0:
alerta="ya existe el proyecto"
formProy = 1
ctx ={'alerta':alerta, 'formProy':formProy}
return render_to_response('scppp/inicial.html', ctx, context_instance=RequestContext(request))
else:
if Proyecto.objects.count() == 0:
id_proyecto=1
else:
id_proyecto=Proyecto.objects.all().aggregate(Max('id_proyecto'))['id_proyecto__max']+1
nombre_proyecto = name
else:
if Proyecto.objects.count() < 0:
alerta = "Introduzca un nombre de proyecto"
formProy = 1
else:
alerta = "data erronea"
formProy = 1
ctx = {'alerta':alerta, 'formProy':formProy}
return render_to_response('scppp/inicial.html', ctx, context_instance=RequestContext(request))
if request.method == "GET" and 'existente' in request.GET: //This is the method
existente = request.GET['existente']
if existente is not None and existente != '':
Proyecto.objects.filter(nombre_proyecto=name)
return render_to_response('scppp/pozo.html', ctx, context_instance=RequestContext(request))
在我的模板上,这就是我的复选标记existente
:
<tr><td>
<span class="Sub-Titulo-Aplicacion">Proyecto: </span>
<input class="check-style" type="checkbox" name="tipo" value="checkbox" >Nuevo</input>
</td></tr>
<tr><td>
<input class="check-style" type="checkbox" name="existente" value="existente" >Existente</input>
</td></tr>
复选标记在HTML视角中“起作用”,但它实际上什么都不做......我不知道我是否应该在模板上声明某些内容,有很多方法让我感到困惑。< / p>
有什么想法吗?
非常感谢提前!
答案 0 :(得分:1)
您的代码中有一些明显的错误:
if Proyecto.objects.count() < 0:
count 表示确定某事物总数的行为。和某事物的总数不能少于零。
所以你的代码在逻辑上是错误的。这个bug也会影响这些行:
if Proyecto.objects.count() > 0:
alerta="ya existe el proyecto"
formProy = 1
ctx ={'alerta':alerta, 'formProy':formProy}
return render_to_response('scppp/inicial.html', ctx, context_instance=RequestContext(request))
else:
if Proyecto.objects.count() == 0:
id_proyecto=1
else:
id_proyecto=Proyecto.objects.all().aggregate(Max('id_proyecto'))['id_proyecto__max']+1
nombre_proyecto = name
执行永远不会达到else语句。
同样在您的** GET请求**处理视图中还有另一个错误。
if existente is not None and existente != '':
Proyecto.objects.filter(nombre_proyecto=name)
return render_to_response('scppp/pozo.html', ctx, context_instance=RequestContext(request))
您没有在数据库中使用选定的 Proyecto 实例。您应该将它们传递给您的模板。你也没有在这个范围内声明ctx。 (您刚刚在 POST请求处理中执行了此操作,并且请求不能同时是POST和GET)。
if existente is not None and existente != '':
projects = Proyecto.objects.filter(nombre_proyecto=name)
ctx = {"projects" : projects}
return render_to_response('scppp/pozo.html', ctx, context_instance=RequestContext(request))
以及 scppp / pozo.html 中你必须有类似的内容来展示它们并使用项目:
<table>
{% for project in projects %}
<tr>
<td>{{project.id_proyecto}}</td>
<td>{{project.nombre_proyecto}}</td>
</tr>
{% endfor %}
</table>