Django request.method = 'GET' 不工作
Django request.method = 'GET' not working
我正在尝试在我的应用程序上加载数据库 table 数据,以便对其进行更新,到目前为止,我发现这是由 request.method = 'GET'
完成的知道这是否总是如此,但它肯定是实现这一目标的方法之一。
但是,我的应用充满了 POST
请求,要在数据库 table 上创建新文档,我只需要通过指定它的名称来检索其中之一。使用 'GET'
方法。但是它不起作用,好像它没有计算表达式,我真的不知道为什么。
这是我的 models.py
:
class Proyecto(models.Model):
id_proyecto = models.IntegerField(primary_key=True) #integer NOT NULL, CLAVE PRIMARIA
nombre_proyecto = models.TextField(null=True) #text,
fecha_creacion = models.DateField(null=True) #date,
existente = models.BooleanField()
def __unicode__(self):
return u'%s | %s ' % (self.id_proyecto, self.nombre_proyecto)
class Meta:
unique_together = [("id_proyecto","nombre_proyecto")]
db_table = 'proyecto'
我将使用 existente
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=""
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 existente is not None and existente != '':
projects = Proyecto.objects.filter(nombre_proyecto=name)
ctx = {"projects" : projects}
return render_to_response('scppp/proyecto.html', ctx, context_instance=RequestContext(request))
if Proyecto.objects.filter(nombre_proyecto=name).exists():
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 not name:
id_proyecto=1
else:
id_proyecto=Proyecto.objects.all().aggregate(Max('id_proyecto'))['id_proyecto__max']+1
nombre_proyecto = name
else:
alerta = "data erronea"
formProy = 1
ctx = {'alerta':alerta, 'formProy':formProy}
return render_to_response('scppp/inicial.html', ctx, context_instance=RequestContext(request))
sombra = "style=\"color: #a2a2a2;\""
num = ""
slash = ""
quotes = ""
arenas = ""
fluidos = ""
onclick = ""
sombra2 = sombra
graf = ""
formProy = 0
ctx = {'id_proyecto':id_proyecto,'nombre_proyecto':nombre_proyecto, 'sombra':sombra, 'sombra2':sombra2, 'graf':graf, 'num':num, 'slash':slash, 'quotes':quotes, 'arenas':arenas, 'fluidos':fluidos, 'onclick':onclick, 'alerta':alerta, 'formProy':formProy}
return render_to_response('scppp/proyecto.html', ctx, context_instance=RequestContext(request))
else:
form = ProyectoForm()
formProy = 1
ctx = {'form': form, 'formProy': formProy}
return render_to_response('scppp/inicial.html', ctx, context_instance=RequestContext(request))
此处 if existente is not None and existente != '':
条件应评估 inicial.html 上的 existente
复选标记是否处于活动状态,如果是,则渲染 proyecto.html 模板。
inicial.html
带复选标记的有趣代码:
<tr><td>
<span class="Sub-Titulo-Aplicacion">Tipo de Proyecto: </span>
<input class="check-style" type="checkbox" name="curva" value="checkbox" >Petroleo</input>
</td></tr>
<tr><td>
<input class="check-style" type="checkbox" name="curva" value="checkbox" >Gas</input>
</td></tr>
<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>
如果此复选框处于活动状态,则呈现 proyecto.html
:
{% for project in projects %}
<a class="Contenedor-Texto-Menu"><span class="Text-menu" > Datos</span></a>
<a href="/pozos{{num}}/{{id_proyecto}}/{{nombre_proyecto}}" class="Contenedor-Texto-sub-Menu"><span class="Text-menu" > Yacimiento y Pozo</span></a>
<a {% autoescape off %}{{arenas}}{{slash}}{{id_proyecto}}{{slash}}{{nombre_proyecto}}{{quotes}}{% endautoescape %} class="Contenedor-Texto-sub-Menu"><span class="Text-menu" {% autoescape off %}{{sombra}}{% endautoescape %}> Arena </span></a><tr>
<a {% autoescape off %}{{fluidos}}{{slash}}{{id_proyecto}}{{slash}}{{nombre_proyecto}}{{quotes}}{% endautoescape %} class="Contenedor-Texto-sub-Menu"><span class="Text-menu" {% autoescape off %}{{sombra}}{% endautoescape %}> Fluido </span></a><tr>
<div style="overflow:hidden; width:0px; height:0px;">
<form id="submitArch" action="/archivo/{{id_proyecto}}/{{nombre_proyecto}}/" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<input id="cargarArch" type="file" class="Contenedor-Texto-sub-Menu" name="archivo" style="display:none;" onchange="submitArch()">
</form>
</div>
<a class="Contenedor-Texto-sub-Menu" {% autoescape off %}{{onclick}}{% endautoescape %}><span class="Text-menu" {% autoescape off %}{{sombra}}{% endautoescape %}> Cargar un archivo </span></a><tr>
<!--<a href="/graficos/{{id_proyecto}}/{{nombre_proyecto}}" class="Contenedor-Texto-Menu">-->
<a {% autoescape off %}{{graf}}{% endautoescape %} class="Contenedor-Texto-Menu" {% autoescape off %}{{sombra2}}{% endautoescape %}><span class="Text-menu" > Procesamiento </span></a><tr>
<a class="Contenedor-Texto-Menu" {% autoescape off %}{{sombra2}}{% endautoescape %}><span class="Text-menu" > Reporte </span></a><tr>
{% endfor %}
这就是 existente
BooleanField 的所有逻辑,抱歉,如果这听起来很幼稚,但这是一个已经开始的项目,有时会变得混乱。
如果您对为什么不评估条件有任何想法请告诉我,我就是想不通。
非常感谢!
PS = 我正在使用 Django==1.6.1
、Python 3.3.1 和 PostgreSQL v9.0.
不需要使用filter.exists
。只需要
if Proyecto.objects.filter(nombre_proyecto=name):
如果查询没有匹配到任何文档,它将return []
。所以id不要输入if
condition.Since emptylist
emptystring
引用 python.
中的 False
if all you want to do is determine if at least one result exists. It’s more efficient to use exists().
if Proyecto.objects.filter(nombre_proyecto=name).exists():
如果你想update
。只需使用get
。
proyecto = Proyecto.objects.get(nombre_proyecto=name)
proyecto.nombre_proyecto = "newname"
proyecto.save()
如果要更新查询集中的 multiple
个文档。
Proyecto.objects.filter(nombre_proyecto=name).update(nombre_proyecto="newname")
备注
如果Proyecto.objects.filter(nombre_proyecto=name)
给出的文件不止一个,不要用get
。用update
。否则会出现multple objects returned
错误。
我正在尝试在我的应用程序上加载数据库 table 数据,以便对其进行更新,到目前为止,我发现这是由 request.method = 'GET'
完成的知道这是否总是如此,但它肯定是实现这一目标的方法之一。
但是,我的应用充满了 POST
请求,要在数据库 table 上创建新文档,我只需要通过指定它的名称来检索其中之一。使用 'GET'
方法。但是它不起作用,好像它没有计算表达式,我真的不知道为什么。
这是我的 models.py
:
class Proyecto(models.Model):
id_proyecto = models.IntegerField(primary_key=True) #integer NOT NULL, CLAVE PRIMARIA
nombre_proyecto = models.TextField(null=True) #text,
fecha_creacion = models.DateField(null=True) #date,
existente = models.BooleanField()
def __unicode__(self):
return u'%s | %s ' % (self.id_proyecto, self.nombre_proyecto)
class Meta:
unique_together = [("id_proyecto","nombre_proyecto")]
db_table = 'proyecto'
我将使用 existente
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=""
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 existente is not None and existente != '':
projects = Proyecto.objects.filter(nombre_proyecto=name)
ctx = {"projects" : projects}
return render_to_response('scppp/proyecto.html', ctx, context_instance=RequestContext(request))
if Proyecto.objects.filter(nombre_proyecto=name).exists():
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 not name:
id_proyecto=1
else:
id_proyecto=Proyecto.objects.all().aggregate(Max('id_proyecto'))['id_proyecto__max']+1
nombre_proyecto = name
else:
alerta = "data erronea"
formProy = 1
ctx = {'alerta':alerta, 'formProy':formProy}
return render_to_response('scppp/inicial.html', ctx, context_instance=RequestContext(request))
sombra = "style=\"color: #a2a2a2;\""
num = ""
slash = ""
quotes = ""
arenas = ""
fluidos = ""
onclick = ""
sombra2 = sombra
graf = ""
formProy = 0
ctx = {'id_proyecto':id_proyecto,'nombre_proyecto':nombre_proyecto, 'sombra':sombra, 'sombra2':sombra2, 'graf':graf, 'num':num, 'slash':slash, 'quotes':quotes, 'arenas':arenas, 'fluidos':fluidos, 'onclick':onclick, 'alerta':alerta, 'formProy':formProy}
return render_to_response('scppp/proyecto.html', ctx, context_instance=RequestContext(request))
else:
form = ProyectoForm()
formProy = 1
ctx = {'form': form, 'formProy': formProy}
return render_to_response('scppp/inicial.html', ctx, context_instance=RequestContext(request))
此处 if existente is not None and existente != '':
条件应评估 inicial.html 上的 existente
复选标记是否处于活动状态,如果是,则渲染 proyecto.html 模板。
inicial.html
带复选标记的有趣代码:
<tr><td>
<span class="Sub-Titulo-Aplicacion">Tipo de Proyecto: </span>
<input class="check-style" type="checkbox" name="curva" value="checkbox" >Petroleo</input>
</td></tr>
<tr><td>
<input class="check-style" type="checkbox" name="curva" value="checkbox" >Gas</input>
</td></tr>
<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>
如果此复选框处于活动状态,则呈现 proyecto.html
:
{% for project in projects %}
<a class="Contenedor-Texto-Menu"><span class="Text-menu" > Datos</span></a>
<a href="/pozos{{num}}/{{id_proyecto}}/{{nombre_proyecto}}" class="Contenedor-Texto-sub-Menu"><span class="Text-menu" > Yacimiento y Pozo</span></a>
<a {% autoescape off %}{{arenas}}{{slash}}{{id_proyecto}}{{slash}}{{nombre_proyecto}}{{quotes}}{% endautoescape %} class="Contenedor-Texto-sub-Menu"><span class="Text-menu" {% autoescape off %}{{sombra}}{% endautoescape %}> Arena </span></a><tr>
<a {% autoescape off %}{{fluidos}}{{slash}}{{id_proyecto}}{{slash}}{{nombre_proyecto}}{{quotes}}{% endautoescape %} class="Contenedor-Texto-sub-Menu"><span class="Text-menu" {% autoescape off %}{{sombra}}{% endautoescape %}> Fluido </span></a><tr>
<div style="overflow:hidden; width:0px; height:0px;">
<form id="submitArch" action="/archivo/{{id_proyecto}}/{{nombre_proyecto}}/" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<input id="cargarArch" type="file" class="Contenedor-Texto-sub-Menu" name="archivo" style="display:none;" onchange="submitArch()">
</form>
</div>
<a class="Contenedor-Texto-sub-Menu" {% autoescape off %}{{onclick}}{% endautoescape %}><span class="Text-menu" {% autoescape off %}{{sombra}}{% endautoescape %}> Cargar un archivo </span></a><tr>
<!--<a href="/graficos/{{id_proyecto}}/{{nombre_proyecto}}" class="Contenedor-Texto-Menu">-->
<a {% autoescape off %}{{graf}}{% endautoescape %} class="Contenedor-Texto-Menu" {% autoescape off %}{{sombra2}}{% endautoescape %}><span class="Text-menu" > Procesamiento </span></a><tr>
<a class="Contenedor-Texto-Menu" {% autoescape off %}{{sombra2}}{% endautoescape %}><span class="Text-menu" > Reporte </span></a><tr>
{% endfor %}
这就是 existente
BooleanField 的所有逻辑,抱歉,如果这听起来很幼稚,但这是一个已经开始的项目,有时会变得混乱。
如果您对为什么不评估条件有任何想法请告诉我,我就是想不通。
非常感谢!
PS = 我正在使用 Django==1.6.1
、Python 3.3.1 和 PostgreSQL v9.0.
不需要使用filter.exists
。只需要
if Proyecto.objects.filter(nombre_proyecto=name):
如果查询没有匹配到任何文档,它将return []
。所以id不要输入if
condition.Since emptylist
emptystring
引用 python.
False
if all you want to do is determine if at least one result exists. It’s more efficient to use exists().
if Proyecto.objects.filter(nombre_proyecto=name).exists():
如果你想update
。只需使用get
。
proyecto = Proyecto.objects.get(nombre_proyecto=name)
proyecto.nombre_proyecto = "newname"
proyecto.save()
如果要更新查询集中的 multiple
个文档。
Proyecto.objects.filter(nombre_proyecto=name).update(nombre_proyecto="newname")
备注
如果Proyecto.objects.filter(nombre_proyecto=name)
给出的文件不止一个,不要用get
。用update
。否则会出现multple objects returned
错误。