编辑Django中表单中给出的信息

时间:2016-01-21 13:02:16

标签: python django forms edit

大家好我希望我可以通过恢复原始值来更改表单中的值,只需更改值并更改数据库 我尝试使用"编辑"来编辑模型表格。按钮,但表单未更新。 没有完成原始值的实例化 所以我有一个

  

models.py

class Champs(models.Model):
    champs = models.CharField(max_length=30)
    contenu = models.CharField(max_length=30)


    def __str__(self):
        if len(self.contenu) > 17:
            return self.champs[:16] + "..."
        else:
            return self.champs
  

forms.py

class ChampsForm(forms.ModelForm):
    class Meta:
        model = Champs
        fields = ('champs','contenu')
  

Views.py

    def champs(request):
        logged_user = get_logged_user_from_request(request)
        champs = Champs.objects.all()
        if logged_user:
            if len(request.GET) > 0:
                form = ChampsForm(request.GET)
                if form.is_valid():
                    form.save(commit=True)
                    return HttpResponseRedirect('/champs')
                else:
                    return render_to_response('polls/champs.html', {'champs': champs, 'form': form})
            else:
                form = ChampsForm()
                return render_to_response('polls/champs.html', {'champs': champs, 'form': form})
        else:
                return HttpResponseRedirect('/login')

    def modify_champs(request):

        if logged_user:
            if len(request.GET) > 0:
                form = ChampsForm(request.GET, instance=...)
                if form.is_valid():
                    form.save(commit=True)
                    return HttpResponseRedirect('/champs', {'user_to_show':logged_user})
                else:
                    return render_to_response('polls/modify_champs.html', {'form': form, 'instance':...})
            else:
                form = ChampsForm(instance=...)
                return render_to_response('polls/modify_champs.html', {'form': form, 'instance':...})
        else:
                return HttpResponseRedirect('/login')
  

champs.py的模板 - >

<div class="col-md-8 col-md-push-4">
        <h1>Formulaire</h1>
        <form action="" method="GET" >{% csrf_token %}
                {{ form.as_p }}
                <p>
                    <input type="submit" class="btn btn-success" value="Add" id="showProfileNavigationButtons" />
                </p>

        <table>
        {% for champs in champs %}<hr>
            (Son id :) {{ champs.id }}<br><br>{{ champs.champs }} : {{ champs.contenu }}
            <a href="../modifyChamps">Modifier</a>
        {% endfor %}
        </table>

        </form>
 </div>
  

完成modify_champs的模板 - &gt;

<div class="row">
        <div class="col-md-8 col-md-push-4">
        <h1>Formulaire</h1>
        <form action="" method="GET" >{% csrf_token %}
                {{ form.as_p }}
                <p>
                    <input type="submit" class="btn btn-success" value="Save" id="showProfileNavigationButtons" />
                </p>

        </form>
  • 我想检索模板中列出的信息&#34; champs.html&#34;并在表格中找到它们&#34; modify_champs.html&#34;并 能够改变它们!谢谢你的时间! the template champs.html

1 个答案:

答案 0 :(得分:0)

将urls.py中的modify_champys网址设置为url(r'^modify_champs/(?P<instance>[0-9]+)/$',.....)

然后将views.py中的视图声明更改为def modify_champs(request, instance):

在views.py中将form = ChampsForm(request.GET, instance=...)更改为form = ChampsForm(request.GET, instance=Champs.objects.get(pk=instance)

然后,当您将URL更改为http://.../modify_champs/1时,表单将使用主键1选择Champs对象。

然后你只需要使用HTML或javascript链接到相关的URL。

编辑:我认为这是一个POST请求而不是GET所以这可能是不正确的