请求 'GET' - Django CRUD 条件

Request 'GET' - Django CRUD conditional

我正在尝试在 Django 中对我的数据库进行查询,但到目前为止我没有得到任何结果,我对这个有点困惑。

proyecto是我需要查询的一种文档,那么我在models上有这个:

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 charfield。

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 的角度看,复选标记 "works",但它实际上什么也没做...我不知道我是否应该在我的模板上声明一些东西,有很多很多方法,我感到困惑。

有什么想法吗?

非常感谢!

您的代码中有一些明显的错误:

if Proyecto.objects.count() < 0:

计数表示确定某物总数的行为。并且某物的总数不能小于零。

所以你的代码在逻辑上是错误的。此错误还会影响这些行:

    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 你必须有这样的东西来展示它们并使用 projects:

<table>
    {% for project in projects %}
    <tr>
        <td>{{project.id_proyecto}}</td>
        <td>{{project.nombre_proyecto}}</td>
   </tr>
   {% endfor %}
</table>