Нет обновления базы данных с помощью UpdateView django - PullRequest
0 голосов
/ 12 июня 2018

Я знаю, что мой код не оптимален, так как я только начинающий с Django, поэтому не стесняйтесь со мной

Вот мой код:

views.py

class ComposantUpdate(UpdateView):
    model = configuration
    fields = '__all__'
    template_name = 'accueil/exploitation/update_composant.html'

update_composant.html

<form action="{% url 'composant_update' pk=composant.id %}" method="post">
    {% csrf_token %}
    <div class="form-group">
        {% for field in form %}
            <label class="col-md-6 offset-md-3 nom_champ"> {{field.label_tag}}</label>
            <input class="col-md-4 offset-md-4 contenu_champ" type="text" name="{{ field.label }}" id="{{ field.id_for_label }}" value="{{ field.value }}"/>
        {%endfor%}
        <br>
        <br>
        <button class="col-md-6 offset-md-3 btn btn-primary" type="submit" value="Update" /> Mettre à jour </button>
    </div>  
</form>

urls.py

path('update_composant/<int:pk>', views.ComposantUpdate.as_view(), 
name='composant_update'),

models.py

class configuration(models.Model):
    Num_ordre = models.CharField(max_length=15)
    Composant = models.CharField(max_length=15)
    Designation = models.CharField(max_length=15)
    Qte_servie = models.IntegerField()
    Qte_a_servir = models.IntegerField()
    Lot = models.CharField(max_length=15)
    Categorie  = models.CharField(max_length=15)
    Famille = models.CharField(max_length=15)
def __str__(self):
    return '%s %s %s' % (self.Num_ordre, self.Designation, self.Lot)

при переходе по URL-адресуформа, все поля получают содержимое базы данных, что я и ожидаю, но если я изменю поле «Лот» и нажму кнопку «Отправить», моя база данных вообще не будет обновлена ​​с новым значением «Лот».У вас есть идеи, почему?Для получения информации я перенаправлен в представление composant_update, и ошибка не возникает

1 Ответ

0 голосов
/ 13 июня 2018

На самом деле я не правильно написал свой html, атрибут "name" во входных данных должен был быть {{field.html_name}} вместо {{field.label}}.

Thisне работает:

<input class="col-md-4 offset-md-4 contenu_champ" type="text" name="{{ field.label }}" id="{{ field.id_for_label }}" value="{{ field.value }}"/>

Это работает:

<input class="col-md-4 offset-md-4 contenu_champ" type="text" name="{{ field.html_name}}" id="{{ field.id_for_label }}" value="{{ field.value }}"/>

См. https://docs.djangoproject.com/en/2.0/topics/forms/#s-looping-over-the-form-s-fields для получения дополнительной информации

Спасибо, Виллем Ван Онсем!

...