Django-使用Form编辑和更新数据库中的现有数据

Django-Edit and update the existing data in database with Form

你好,我需要编辑和更新 database.I 中已经存在的数据行,我猜他们是 views.py 中的一些问题。所以我不确定我的 views.py 是否正确。请检查并告诉我是否有任何问题以及如何进行。

谢谢

models.py 是:

    class chefequipe(models.Model):
    nom = models.CharField(max_length=200)
    prenom = models.CharField(max_length=200)
    matricule = models.CharField(max_length=200)
    login = models.CharField(max_length=200)
    password = models.CharField(max_length=200)
    statut = models.CharField(max_length=200)
    objects = models.Manager()
     def __str__(self):
        return self.matricule

forms.py :

    class ChefEquipeRegister(forms.Form):
    nom= forms.CharField(required=True , widget=forms.TextInput)
    prenom=forms.CharField(required=True , widget=forms.TextInput)
    matricule=forms.CharField(required=True , widget=forms.TextInput)
    login=forms.CharField(required=True , widget=forms.TextInput)
    password=forms.CharField(required=True , widget=forms.PasswordInput)
    statut=forms.CharField(required=True , widget=forms.TextInput)

view.py

    def updatechef(request , id):
    var=models.chefequipe.objects.filter(id=id)
    form_data = forms.ChefEquipeRegister(request.POST or None )

    if form_data.is_valid():



 chefequipe = models.chefequipe()
    chefequipe.nom = form_data.cleaned_data['nom']
    chefequipe.prenom= form_data.cleaned_data['prenom']
    chefequipe.login = form_data.cleaned_data['login']
    chefequipe.password = form_data.cleaned_data['password']
    chefequipe.statut = form_data.cleaned_data['statut']
    chefequipe.matricule = form_data.cleaned_data['matricule']

    chefequipe.save()



context= {
    'var' : var,        
}
    return render(request , 'administrateur/updatechef.html', context  )

页面html

    {% extends 'baseadmin.html' %}

{% block content %}

<form action="" method="post">





    <div class="container">
        <div class="columns is-mobile">
            <div class="column is-half is-offset-one-quarter">

                <form action="" method="post">
                    {%  csrf_token %}

                    {% for var in var %}
                    <div class="content"> <h1>  Modifier Information Chef D'équipe : {{var.prenom }} {{ var.nom }}  </h1></div>
                 <label>Nom</label>  <input id="nom" type="text" name="nom" value="{{ var.nom }}">
                 <label>Prenom</label>  <input id="prenom" type="text" name="prenom" value="{{ var.prenom }}">
                 <label>Matricule</label>  <input id="matricule" type="text" name="matricule" value="{{ var.matricule }}">
                 <label>Statut</label>  <input id="statut" type="text" name="statut" value="{{ var.statut }}">
                 <label>Login</label>  <input id="login" type="text" name="login" value="{{ var.login }}">
                 <label>Password</label>  <input id="password" type="text" name="password" value="{{ var.password }}">
                    {% endfor %}




                        </div>
                    <input type="submit" value="Modifier" class="button is-primary">
                </form>
            </div>
        </div>
    </div>
{% endblock %}  

我需要更新我数据库中的现有数据

您使用 Form 而不是 ModelForm 有什么原因吗? ModelForms 用于创建或更新模型实例。然后当你得到request.POST数据时,你可以在ModelForm中分配你想要更新的模型实例(数据库行)。

models.py

class ChefEquipeRegister(forms.ModelForm) ...

views.py

if request.method == POST:
form = ChefEquipeRegister(request.POST, instance=**INSTANCE)

我认为你应该确保你的模型有一个主键来访问每个模型实例,然后将你的表单重写为 ModelForm。跟随这里:https://docs.djangoproject.com/en/2.2/topics/forms/modelforms/

你的情况:

views.py

.....
.....
.....

if form.is_valid():
    object_chefequipe = chefequipe.objects.get(id=id)
    form = ChefEquipeRegister(request.POST, instance=object_chefequipe)
    form.save()