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

时间:2019-07-24 09:31:37

标签: python django postgresql django-views updates

你好,我需要编辑和更新数据库中已经存在的数据行。我想这是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 %}  

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

2 个答案:

答案 0 :(得分:0)

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

models.py

class ChefEquipeRegister(forms.ModelForm) ...

views.py

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

我认为您应该确保您的模型具有访问每个模型实例的主键,然后将您的Form重写为ModelForm。请按照此处操作:https://docs.djangoproject.com/en/2.2/topics/forms/modelforms/

答案 1 :(得分:0)

就你而言:

views.py

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

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