在Django中未验证表单
我对Django表格有个奇怪的问题。在这个表单中,我可以根据单击提交按钮来完成不同的操作。在开发过程中的某个时刻,一切都很顺利:我的表单验证正常,而且它也正是我想要的。但是现在(我真的不知道我会做什么错事来打破它),提交操作根本不起作用。我没有收到任何错误,只是什么也没做 以下是my forms.py文件中的代码:在Django中未验证表单,django,django-forms,django-templates,django-validation,Django,Django Forms,Django Templates,Django Validation,我对Django表格有个奇怪的问题。在这个表单中,我可以根据单击提交按钮来完成不同的操作。在开发过程中的某个时刻,一切都很顺利:我的表单验证正常,而且它也正是我想要的。但是现在(我真的不知道我会做什么错事来打破它),提交操作根本不起作用。我没有收到任何错误,只是什么也没做 以下是my forms.py文件中的代码: class AssetModif(forms.Form): def __init__(self, *args, **kwargs): proj_id
class AssetModif(forms.Form):
def __init__(self, *args, **kwargs):
proj_id = kwargs.pop('proj_id')
super(AssetModif, self).__init__(*args, **kwargs)
self.proj_id = proj_id
EPISODE_CHOICES = [('-1', '------------')]
for e in Project.objects.filter(proj_id_parent=proj_id).order_by('proj_saison', 'proj_numepisode'):
EPISODE_CHOICES.append((e.proj_name,
"e" + str(e.proj_saison).zfill(2) + str(e.proj_numepisode).zfill(2) +
"_" + e.proj_name))
self.fields['episodes'].choices = EPISODE_CHOICES
self.fields['episode_etat'].choices = EPISODE_CHOICES
TYPE_CHOICES = [(type.type_name, type.type_name) for type in Type.objects.all()]
ASSET_CHOICES = (('', '-- choisir un type en premier'))
type = forms.ChoiceField(choices=TYPE_CHOICES,
widget=forms.Select(attrs={'onchange':'get_asset_from_type();'}))
asset = LazyChoiceField(choices=ASSET_CHOICES, required=False)
episodes = forms.ChoiceField()
etat = forms.CharField()
episode_etat = forms.ChoiceField()
commentaire = forms.CharField(widget=forms.Textarea)
加上一些save_action()方法,如果有人要求,我可以添加这些方法。my views.py中的代码:
def modif_asset(request):
try:
proj = request.session['proj']
nom = request.session['nom']
except:
request.session['proj'] = 1
proj = request.session['proj']
request.session['nom'] = ""
nom = ""
if request.method == 'POST' and (request.POST.get("action_add_episode", "") == "Ajout Episode"):
form = AssetModif(request.POST, proj_id = request.session['proj'])
if form.is_valid():
asset = form.save_episode()
#return HttpResponseRedirect(reverse('menu'))
return render_to_response("asset/modif.html", {'proj':proj, 'form':form, 'asset':asset}, context_instance=RequestContext(request))
else:
asset = form.save_episode()
return render_to_response("asset/modif.html", {'proj':proj, 'form':form, 'asset':"toooooooo"}, context_instance=RequestContext(request))
elif request.method == 'POST' and (request.POST.get("action_delete_asset", "") == "Suppression BDD"):
form = AssetModif(request.POST, proj_id = request.session['proj'])
if form.is_valid():
asset = form.delete_asset()
#return HttpResponseRedirect(reverse('menu'))
return render_to_response("asset/modif.html", {'proj':proj, 'form':form, 'asset':asset}, context_instance=RequestContext(request))
elif request.method == 'POST' and (request.POST.get("action_ajout_etat", "") == "Ajout Etat"):
form = AssetModif(request.POST, proj_id = request.session['proj'])
if form.is_valid():
asset = form.save_etat()
return render_to_response("asset/modif.html", {'proj':proj, 'form':form, 'asset':asset}, context_instance=RequestContext(request))
elif request.method == 'POST' and (request.POST.get("action_ajout_comment", "") == "Ajout Commentaire"):
form = AssetModif(request.POST, proj_id = request.session['proj'])
if form.is_valid():
asset = form.save_comment()
return render_to_response("asset/modif.html", {'proj':proj, 'form':form, 'asset':asset}, context_instance=RequestContext(request))
else:
form = AssetModif(proj_id=request.session['proj'])
c = {'proj': proj, 'form':form, 'asset':" Miiii "}
c.update(csrf(request))
return render_to_response("asset/modif.html", c, context_instance=RequestContext(request))
我的模板是这样的:
<form method="POST" action="" name="form_modif">{% csrf_token %}
<table>
<tr><td> Type </td><td> {{ form.type }} </td>
<td> Asset </td><td> {{ form.asset }} </td></tr>
</table>
<div id="ajout_episode">
<p><b> Premier épisode de l'asset </b></p>
<table>
<tr><td>Episode</td><td> {{ form.episodes }}</td></tr>
<tr><td><input type="submit" name="action_add_episode" value="Ajout Episode" /></td></tr>
</table>
</div>
<div id="creation_etat">
<p><b> Ajout d'un état </b></p>
<table>
<tr><td>Etat</td><td> {{ form.etat }}</td></tr>
<tr><td>Premier épisode de l'état</td><td> {{ form.episode_etat }}</td></tr>
<tr><td><input type="submit" name="action_ajout_etat" value="Ajout Etat" /></td></tr>
</table>
</div>
<div id="ajout_comment">
<p><b> Ajout d'un commentaire </b></p>
<table>
<tr><td> {{ form.commentaire }}</td></tr>
<tr><td> <input type="submit" name="action_ajout_comment" value="Ajout Commentaire" /></td></tr>
</table>
</div>
<div id="suppression_bdd">
<p><b> Suppression de l'asset en BDD </b></p>
<input type="submit" onclick="return verifier();" name="action_delete_asset" value="Suppression BDD" />
</form>
{%csrf\u令牌%}
类型{form.Type}
资产{{form.Asset}}
总理与行政长官;资产皮索德酒店
插曲{form.scents}
阿约特·德恩和埃库特;塔特
Etat{{form.Etat}
总理与行政长官;皮索德·德·勒和埃库特;tat{{form.eposit_etat}
阿约特·德恩评论
{{form.commentaire}}
抑制资产负债表
我真的很感激任何帮助,因为我完全被它困住了不是一个太多的答案,而是关于获得错误的指针 您的第一个起点应该是查找字段错误,因为您目前根本没有输出它们 所以如果你这样做了
<div id="ajout_episode">
<p><b> Premier épisode de l'asset </b></p>
<table>
<tr><td>Episode</td><td> {{ form.episodes }}</td></tr>
<tr><td><input type="submit" name="action_add_episode" value="Ajout Episode" /></td></tr>
</table>
{{form.episodes.errors}}
</div>
总理与行政长官;资产皮索德酒店
插曲{form.scents}
{{形式.情节.错误}
然后它将显示该字段的错误。
可以使用以下代码段检查错误:
表单也有全局错误变量,尽管目前找不到或记不清它的名称。
<form method="POST" action="url_to_your_view" name="form_modif">
它正以这种方式调用右视图。它在if form.is\u valid()
的else
语句中返回一些内容,因此它调用了正确的函数,而且,只是表单没有验证好,它在else
语句中输出了一些内容。但如果表单正在验证,则数据为空。我试图输出self.cleaned_数据['asset'],但它什么也不返回你有调试工具吗?没有。你知道一个容易用的吗?这非常简单,只需导入pdb并键入pdb.set_trace(),您就可以在其中放置断点