编辑现有表单的表单不会保存,并重定向到错误。 Django

时间:2019-02-15 12:21:23

标签: django forms model

我试图将编辑表单添加到现有模型中,但是并不能每次保存,而是将我重定向到主页而不是“帐户”页面。我究竟做错了什么?为什么现有模型中的更改不可见?任何帮助将不胜感激。

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>

1 个答案:

答案 0 :(得分:2)

这是一个非常微妙的问题。

通常在Django中,建议使用以斜杠结尾的URL(例如“ / account /”),但是您的URL只是“ / account”,没有斜杠。

现在,当您将action="."放入表单时,浏览器会将其解释为“发布到当前目录的根目录”。如果您的URL确实以斜杠结尾,则将解析为同一页面。但是由于没有,浏览器会发布到根目录本身,即“ /”。

最好的解决方案是将您的URL模式更改为r'^account/$';另外(但不推荐),您可以将表单更改为使用action=""