从表单编辑数据-Django

时间:2018-09-21 14:38:42

标签: django forms model django-forms django-views

我正在寻找有关我知道的非常基本的问题的帮助,但是我无法解决它,而且我不知道我在哪里做错了事(像往常一样)

所以基本上我已经创建了一个模型形式“ 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。”错误,我知道这是由于某些原因导致表单无效,因此“ if”循环未得到验证,然后我跌至视图的末尾,该视图未返回HttpResponse对象。

但是我不知道为什么表格无效,或者我做错了什么...

2 个答案:

答案 0 :(得分:0)

好吧,我对此进行了编辑以使其更加有用。 您的视图必须类似于this。我会尝试这种方式:

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)

让我知道是否可行!,

答案 1 :(得分:0)

编辑:我尝试过

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())

现在,我将使用数据访问表单!但是当我保存表单时,它不会替换表单,而是创建一个新条目。