【问题标题】:Edit data from a form - Django从表单编辑数据 - Django
【发布时间】:2019-02-26 00:01:13
【问题描述】:

我正在就我知道的一个非常基本的问题寻求帮助,但我无法修复它,我不知道我哪里做错了(像往常一样)

所以基本上我已经创建了一个模型表单“formulaire_equipement”

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

基于“公式”模型:

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 对象。

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

【问题讨论】:

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


    【解决方案1】:

    编辑:我试过这个

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

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

    【讨论】:

      【解决方案2】:

      好的,我将其编辑为更有帮助。 您的视图必须类似于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)
      

      让我知道这是否有效!,

      【讨论】:

      • 感谢您的回复,好像没有用,我的意思是我没有看到任何信息...
      • 什么意思你看不到任何信息?你期待什么 vs 你看到什么?您的模板是使用 {{Formulaire}} 而不是 {{form}} 吗?
      • 我的意思是我什么都看不到,它不会改变我得到的错误,我根本看不到任何打印的东西。我试图按照你说的重写代码,似乎 request.method == 'POST' 没有经过验证,因为我直接进入“else:”部分
      • &lt;h1&gt;Modifier l'équipement&lt;/h1&gt; &lt;form action="{% url 'formulaire' %}" method='POST'&gt; {% csrf_token %} {{ form.as_p }} &lt;input type="submit" id="myBtn" value="Sauvegarder"/&gt; &lt;/form&gt;
      • 谢谢。尝试用 {{Formulaire.as_p}} 更改 {{form.as_p}}。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-03
      • 2018-09-06
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      相关资源
      最近更新 更多