使用GET值

时间:2016-11-30 10:02:12

标签: django django-forms django-views

我正在创建一个允许处理表单更新的函数。 在我看来,用户提供了一个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

的值

非常感谢你能帮助我!

enter image description here

PS:也许我需要将表单部分放在query_update if loop中?

2 个答案:

答案 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?)值。所以我建议你应该在同一个表格上发帖。