要求' GET' - Django CRUD有条件的

时间:2015-03-17 14:11:14

标签: python django postgresql django-templates psycopg2

我正在尝试在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>

有什么想法吗?

非常感谢提前!

1 个答案:

答案 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>