我试图将编辑表单添加到现有模型中,但是并不能每次保存,而是将我重定向到主页而不是“帐户”页面。我究竟做错了什么?为什么现有模型中的更改不可见?任何帮助将不胜感激。
views.py
def account(request):
data_now = datetime.datetime.now().strftime("%Y-%m-%d")
#my form
time = get_object_or_404(Time, pk=52)
if request.method == "POST":
form = TimeEditForm(request.POST, instance=time)
if form.is_valid():
time = form.save(commit=False)
time.save()
return redirect('account')
else:
form = TimeEditForm(instance=time)
context = {'data_now': data_now, 'time_edit_form': form}
return render(request, 'account.html', context)
forms.py
class TimeEditForm(forms.ModelForm):
class Meta:
model = Time
fields = ('compartment',)
labels ={
'free_or_no': 'field name in my language?'
}
models.py
class Time(models.Model):
day_time = models.ForeignKey(DayTime, on_delete=models.CASCADE)
compartment = models.CharField(max_length=11)
free_or_no = models.BooleanField(default=True)
time_equivalent = models.IntegerField()
urls.py
urlpatterns = [
url(r'^$', views.masseur_detail, name='masseur_detail'),
url(r'^account$', views.account, name='account')
]
account.html
<form action="." method="post">
{% csrf_token %}
{{ time_edit_form|crispy }}
<button type="submit" class="btn btn-block btn-primary"> Save</button>
</form>
答案 0 :(得分:2)
这是一个非常微妙的问题。
通常在Django中,建议使用以斜杠结尾的URL(例如“ / account /”),但是您的URL只是“ / account”,没有斜杠。
现在,当您将action="."
放入表单时,浏览器会将其解释为“发布到当前目录的根目录”。如果您的URL确实以斜杠结尾,则将解析为同一页面。但是由于没有,浏览器会发布到根目录本身,即“ /”。
最好的解决方案是将您的URL模式更改为r'^account/$'
;另外(但不推荐),您可以将表单更改为使用action=""
。