大家好我希望我可以通过恢复原始值来更改表单中的值,只需更改值并更改数据库 我尝试使用"编辑"来编辑模型表格。按钮,但表单未更新。 没有完成原始值的实例化 所以我有一个
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>
答案 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所以这可能是不正确的