【问题标题】:The form editing the existing form does not save and redirects to wrong. Django编辑现有表单的表单不保存并重定向到错误。姜戈
【发布时间】:2019-02-15 12:21:23
【问题描述】:

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

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>

【问题讨论】:

  • 请出示模板。
  • 该视图的其余部分在哪里?
  • 这里没有任何东西可以将您带到主页。您需要提供更多详细信息。你要去哪个 URL 来查看表格?表格显示正确吗?
  • 表格显示正确,但是当你编辑它时,模型没有任何变化。我希望在表单中始终可见的地址,在更改它或在这个地方进行其他活动之后只是'/帐户'我不想在主页上做任何事情。你看到我做错了吗?为什么不保存模型中的更改?
  • 对不起,我无法理解“我希望在表单中始终可见的地址,在更改它或在这个地方进行其他活动后只有'/帐户”。

标签: django forms model


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-10-18
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多