【问题标题】:Modify data after Django form submissionDjango表单提交后修改数据
【发布时间】:2017-04-09 22:19:40
【问题描述】:

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

有一些用户步骤(我在第 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()

我认为可以输入数据,但不能立即将其保存在数据库中。 我走对了吗?

【问题讨论】:

  • 我建议您阅读以下内容:docs.djangoproject.com/en/1.10/topics/forms 并在您的代码中遵循相同的模式
  • @e4c5 我已经阅读了这部分,但可能更快......我将详细了解我可以制作这个过程。谢谢

标签: python mysql django forms django-queryset


【解决方案1】:

你的第一步很好。在第二步中,如果你试图让用户提交一个部分有效的表单,保存一半的值,然后让他们更新其余的,你会过于复杂。在表单完全有效之前不要保存任何值。

如果您遵循该建议,当您将无效表单传回模板时,将执行第三步。您将获得一个表格,其中预先填写了正确的字段,并且错误的字段突出显示了验证错误消息,帮助用户了解他们做错了什么。解释见此代码中的 cmets:

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() 行更新。

【讨论】:

  • 好的,但是如果用户重新提交相同的表单,值已经填写或者他需要再写一次所有这些数据?
  • 值将填充他最初输入的任何内容。
猜你喜欢
  • 2010-09-25
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 2015-02-18
  • 2016-07-11
  • 1970-01-01
  • 2014-07-19
相关资源
最近更新 更多