在Django表单提交后修改数据

时间:2016-11-25 13:34:01

标签: python mysql django forms django-queryset

我正在寻找让用户可以修改为了纠正填充过程中的错误而创建的表单。

有一些用户步骤(我在步骤4阻止了我们):

  • 1)HTML页面上显示一个空表单

  • 2)用户填写表单并单击提交按钮 验证数据并在MySQL数据库中保存对象。

  • 3)我显示简历类型以验证所有数据是否都有更正

  • 4)我想在简历下面放一个按钮Modify。用户可以修改一个或多个字段并更新MySQL数据库。

问题如下:我不知道如何做到这一点(第4步)。正如我从Django开始,是否有可能获得一些建议或脚本的一部分?

views.py

def IdentityFormulary(request) :

    form = IdentityForm(request.POST or None)

    if form.is_valid() :   
        instance = form.save()
        return HttpResponseRedirect('formulaire_traite')

    context = {
        "form" : form,
        }

    return render(request, 'form_Identity.html', context)



def CompletedFormulary(request) :

   identity = Identity.objects.all().order_by("-id")[0]

   context = {
        "identity" : identity,
    }

    return render(request, 'recapitulatif_identity.html',context) 

我的HTML模板:

<h2 align="center"> Votre formulaire a été validé </align> </h2>


{% block content %} 
Votre personne porte le numéro : {{ identity.id }} 

<h3> Récapitulatif des données enregistrées : </h3>

<li> Civilité : {{identity.title}}</li>
<li> Nom : {{identity.lastname}}</li>
<li> Prénom : {{identity.firstname}}</li>
<li> Sexe : {{identity.sex}}</li>
<li> Date de Naissance : {{identity.birthday}}</li>
<li> Ville de Naissance : {{identity.birthcity}}</li>
<li> Pays de Naissance : {{identity.birthcountry}}</li>
<li> Nationalité : {{identity.nationality}}</li>
<li> Profession : {{identity.job}}</li>
<li> Adresse : {{identity.adress}}</li>
<li> Ville : {{identity.city}}</li>
<li> Code Postal : {{identity.zip}}</li>
<li> Pays : {{identity.country}}</li>
<li> Email : {{identity.mail}}</li>
<li> Téléphone : {{identity.phone}}</li>

{% endblock %} 

<br></br>

<form method='POST' action='/Identity/accueil'> {% csrf_token %}
<input type ="submit" value="Retour fiche identité" />
</form>

<form method='POST' action='/BirthCertificate/accueil'> {% csrf_token %}
<input type ="submit" value="Création d'un acte de naissance" />
</form>

我看到了一些与我的第4步相对应的功能:例如Form.cleaned_data,但我不知道如何实现这一步。

谢谢!

编辑:

我正在阅读有关以下内容的部分:

instance = form.save(commit=False)
instance.save()

我认为输入数据是可能的,但不能立即将其保存在数据库中。 我正确的方式?

1 个答案:

答案 0 :(得分:1)

你的第一步没问题。在第二步中,如果您尝试允许用户提交部分有效的表单,保存一半的值,然后让他们更新其余的表单,那么您将过于复杂。在表单完全有效之前,请不要保存任何值。

如果您遵循该建议,当您将无效表单传回模板时,将发生第三步。您将获得一个预先填写正确字段的表单,并使用验证错误消息突出显示错误字段,帮助用户知道他们做错了什么。请参阅此代码中的注释以获取解释:

def IdentityFormulary(request) :

    form = IdentityForm(request.POST or None)  # request.POST includes invalid data

    if form.is_valid() :   # Returns False because user incorrectly submitted form
        instance = form.save()
        return HttpResponseRedirect('formulaire_traite')

    context = {
        "form" : form,  # This is the partially-filled, invalid form with error messages
        }

    return render(request, 'form_Identity.html', context)  # This re-renders the template with a partially filled form, _with_ error messages to help the user.

然后,您的第四步需要更改,以使“修改”按钮实际上与“提交”按钮相同。用户只是重新提交之前无效的相同表单。希望这次他们编辑他们的回复,或者他们会得到错误消息,并且必须重新提交,直到表单返回有效。如果表单在提交时有效,则数据库将在您的专线form.save()上更新。