Редактировать данные из формы - Django - PullRequest
0 голосов
/ 21 сентября 2018

Мне нужна помощь по очень простой проблеме, которую я знаю, но я не могу ее исправить, и я не знаю, где я сделал что-то не так (как обычно)

Так что в основном я имеюсоздал форму модели "Formulaire_equipement"

class formulaire_equipement(forms.ModelForm):
class Meta:
    model = Formulaire
    fields = '__all__'

на основе модели "Formulaire":

class Formulaire(models.Model) :
nom_equipement = models.CharField(max_length=200)
constructeur = models.CharField(max_length=100)
choix_categorie = [
    ('Encodeur', 'Encodeur'),
    ('Modulateur', 'Modulateur'),
    ('Packager', 'Packager'),
    ('Playout', 'Playout')
  ]
categorie = models.CharField(max_length=100, choices=choix_categorie)
reference = models.CharField(max_length=100, null=True)
IP = models.CharField(max_length=15)
identifiant = models.CharField(max_length=50, null=True)
mot_de_passe = models.CharField(max_length=100, null=True)

Оттуда я могу отправить форму, и я уже создал представление, где я могудоступ и отображение данных, предоставленных пользователем.

 <h3> Nom : {{Formulaire.nom_equipement}} </br>
Constructeur : {{Formulaire.constructeur}} </br>
Catégorie : {{Formulaire.categorie}} </br>
Référence : {{Formulaire.reference}} </br>
IP management : <a href="http://{{Formulaire.IP}}/"> {{Formulaire.IP}} </a> </br>
Identifiant de connexion : {{Formulaire.identifiant}} </br>
Mot de passe : {{Formulaire.mot_de_passe}} </br> </h3>
<a class="btn" method="POST" href="{% url 'modifier_equipement' pk=Formulaire.pk %}"> modifier équipement </a>
<a class="btn" href="{% url 'supprimer_equipement' pk=Formulaire.pk %}"> supprimer équipement </a>
</div>

Проблема возникает, когда я пытаюсь изменить ранее созданную форму через URL

path('fiche/<int:pk>/edit/', views.edit_formulaire, name='modifier_equipement')

, ссылаясь на представление "edit_formulaire"":

def edit_formulaire(request, pk):
this_form = Formulaire.objects.get(id=pk)
form = formulaire_equipement(request.POST or None, instance=this_form)
if form.is_valid():
    form.save()
    context = {
    'Formulaire':form
    }
    return render(request, 'adress_hub/edit_formulaire.html', context)

Затем оттуда я получаю" Представление search.views.edit_formulaire не вернуло объект HttpResponse. Вместо этого он возвратил None. "ошибка, и я знаю, что это потому, что форма по некоторым причинам недопустима, поэтому цикл «если» не проверен, и затем я падаю до конца представления, которое не возвращает объект HttpResponse.

Но я не могу понять, почему форма недействительна или что я делаю не так ...

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

РЕДАКТИРОВАТЬ: я попробовал это

def edit_formulaire(request, pk):
    this_form = Formulaire.objects.get(id=pk)
    form = formulaire_equipement(request.POST or None, instance=this_form)
    if form.is_valid():
        form.save()
        context = {
        'Formulaire':form
        }
        return render(request, 'adress_hub/edit_formulaire.html', context)
    else:
        return render(request, 'adress_hub/formulaire.html', locals())

и теперь я получаю доступ к форме с данными!но когда я сохраняю форму, она не заменяет форму, она просто создает новую запись.

0 голосов
/ 21 сентября 2018

Хорошо, я отредактировал это, чтобы быть более полезным.Ваше мнение должно напоминать это .Я бы попробовал вот так:

def edit_formulaire(request, pk):
    this_form = Formulaire.objects.get(id=pk)
    if request.method == 'POST':
        form = formulaire_equipement(request.POST or None, instance=this_form)
        if form.is_valid():
            form.save()
            # Redirect the user after submitting the form, for example:
            return HttpResponseRedirect('/thanks/') 
    else:
        form = formulaire_equipement(instance=this_form)
    context = {'Formulaire':form}
    return render(request, 'adress_hub/edit_formulaire.html', context)

В любом случае, что-то не так с вашим постом, и вы хотите узнать почему, попробуйте добавить просто:

if form.is_valid():
    # your code
else:
    print(form.errors)

Дайте мне знатьесли это работает!

...