【问题标题】:Django save: When click save database not updating on admin.pyDjango 保存:单击保存数据库时未在 admin.py 上更新
【发布时间】:2012-10-24 19:43:43
【问题描述】:

这是我的代码:

views.py

def form_valid(self, form):
    form.save()
    return HttpResponseRedirect(reverse("departmentt_view"))

相关模板:

<form action="{% url Condition_view department_id patient_NO %}" method="post">
    {% csrf_token %}
<input type="submit" value="Save"/>

当我点击保存时,它应该更新 admin.py 中的数据库并返回第一页 departmentt_view。但是当我点击保存它返回空白(白页)但仍然指向相同的添加127.0.0.1:8000/Diablo/1/123456/Condition

谁能帮我解决这个问题。提前谢谢你。

编辑的程序:

view.py

def form_valid(self, request, department_id, patient_NO):
    if request.method == 'POST':
        form = ConditionForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse("departmentt_view"))
    return(reverse("form_valid"))

urls.py

url(r'^diablo/(?P<department_id>\d+)/(?P<patient_NO>\d+)/Condition/$', 'diabloreb.views.form_valid', name='form_valid'),

更改为此代码后,我又遇到另一个错误,提示 could not import diablorab.views.form_validparent 模块不存在。

所以我改回这个

url(r'^diablo/(?P<department_id>\d+)/(?P<patient_NO>\d+)/Condition/$', ConditionView.as_view(), name = 'Condition_view',),

当我更改为这个网址时,我会得到相同的输出,它只显示白页。

相关模板

<form action="." method="post">
    {% csrf_token %}
<input type="submit" value="Save"/>

我完全迷路了。谁能帮我。 非常感谢。

【问题讨论】:

  • 什么是{% url Condition_view department_id patient_NO %}?它与您当前的网址127.0.0.1:8000/Diablo/1/123456/Condition 相同吗?如果相同,您应该尝试写 &lt;form action="." method="post"&gt;

标签: django django-templates django-admin django-views


【解决方案1】:

试试:-

<form action="." method="post">
    {% csrf_token %}
<input type="submit" value="Save"/>

所以它提交到同一个页面。

如果这个页面是127.0.0.1:8000/Diablo/1/123456/Condition,那么这个url似乎有3个不同的参数。

您的 urls.py 正则表达式应该指向您的视图函数,例如:-

url(r'^Diablo/(?P<department_id>\d+)/(?P<patient_NO>\d+)/condition/$',   
'yourapp.views.form_valid',
name='form_valid'),

您的form_valid 视图函数定义应该总共接受 4 个参数,如下所示:-

def form_valid(request, department_id, patient_NO):

    form = YourForm()

    if request.POST == 'POST':
        form = YourForm(request.POST)
        if form.is_valid():
            # do whatever you else you need.
            form.save()  
            return HttpResponseRedirect(reverse("departmentt_view"))

    return(reverse("form_valid")

请注意,这并不像在您的代码中显示的那样声明 form.save() 那么简单。您实际上需要确保定义并导入您的表单类(在我的示例代码中,YourForm 是我所指的表单类),以便您的视图函数可以使用它并执行像 form = YourForm(request.POST) 这样的分配,以便您的表单类接收来自提交表单的用户的 POST 变量(可以说是“POST 请求”)。

已编辑

View 函数只接受 2 个参数。

【讨论】:

  • 感谢@Calvin 的快速回复。让我再解释一下。抱歉没有详细说明。此页面是一个弹出窗口,单击保存后,我希望它返回到第一页。换句话说,我希望窗口关闭并返回departmentt_view 并更新数据库。我希望我清楚自己。
  • 我的 urls.py url(r'^Diablo/(?P&lt;department_id&gt;\d+)/(?P&lt;patient_NO&gt;\d+)/Condition/$', ConditionView.as_view(), name = 'Condition_view',), @Calvin Cheng : 我应该改成这样url(r'^Diablo/(?P&lt;Condition_view&gt;[\w-]+)/(?P&lt;department_id&gt;\d+)/(?P&lt;patient_NO&gt;\d+)/$', 'Condition.views.form_valid', name = 'form_valid'),.Thanks
  • 在这种情况下,你只有2个参数进来。所以我的视图函数应该修改为def form_valid(request, department_id, patient_NO):
  • 感谢@Calvin Cheng。我仍然无法保存它:(点击保存后我得到了相同的页面然后它只是给了我白页
猜你喜欢
  • 1970-01-01
  • 2020-02-09
  • 2021-08-13
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 2022-11-15
相关资源
最近更新 更多