我正在创建一个允许处理表单更新的函数。 在我看来,用户提供了一个ID,然后脚本获取此ID并显示相应的表单,可以更新数据。
我的功能如下:
def Identity_Update(request) :
query_update = request.GET.get('q4')
if query_update :
query_update_list = Identity.objects.filter(id__iexact=query_update)
else :
query_update_list = Identity.objects.none() # == []
template_name = 'edit.html'
############
instance = Identity.objects.get(id = ??? ) # ID have to be egal to query_update
form = IdentityForm(request.POST or None, instance = instance)
if form.is_valid():
form.save()
return HttpResponseRedirect('accueil')
context = {
"query_update" : query_update,
"query_update_list" : query_update_list,
"form": form,
"instance" : instance
}
return render(request, template_name, context)
我的模板如下:
<!-- ############################################## -->
<!-- Modifier un formulaire dans la Base de Données -->
<!-- ############################################## -->
<h2 align="center"> Modification des fiches individuelles </align> </h2>
{% block content %}
<h4> ID du formulaire à modifier : </h4>
<form method="GET" action="">{% csrf_token %}
<input type="text" name="q4" placeholder="Entrer un ID" value="{{ request.GET.q4 }}">
<input type="submit" value="Valider l'ID">
</form>
<ul>
Personne concernée :
<br></br>
{% for item in query_update_list %}
<li> {{ item }} </li>
{% endfor %}
</ul>
<br></br>
<h4> Modification du formulaire : </h4>
<form method='POST' action= "" > {% csrf_token %}
{{form.as_ul}}
<input type ="submit" value="Valider" />
</form>
{% endblock %}
我遇到以下问题:
如何获取用户返回的值q4
并将其设置为id = q4
。
我没有办法做到这一点。
在图片中,表单已经填充,因为我手动编写了一个id,但表单应该保持为空,直到我给q4
非常感谢你能帮助我!
PS:也许我需要将表单部分放在query_update if loop
中?
答案 0 :(得分:1)
尝试覆盖IdentityUpdate类的get_object()方法,从请求的GET参数中选择特定对象。
class IdentityUpdate(UpdateView) :
model = Identity
form_class = IdentityForm
fields = '__all__'
template_name = 'resume.html'
def get_object(self):
query_update = request.GET.get('q4')
return get_object_or_404(Identity, pk=query_update)
如果您更喜欢使用基于函数的视图,请尝试将Identity_Update()视图更改为:
def Identity_Update(request) :
# ID object given by user
query_update = request.GET.get('q4')
obj = get_object_or_404(Identity, pk=query_update)
if query_update :
updating_form = IdentityForm(request.POST, instance = obj)
....
答案 1 :(得分:0)
我认为你的问题是:
发布此表单时:
<form action="" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Update" />
</form>
q4
输入中的值不会被提交,因为它们的格式不同,因此您可以在视图中获得q4
(ID?)值。所以我建议你应该在同一个表格上发帖。