[英]Unable to update CharField - Django
首先,我很高興來到這里,最近我讀了你的書,在這里找到了有用的答案。
這是我的第一篇文章,所以請對我好一點,我是編程方面的新手。
因此,我正在用Django編寫我的第一個Web應用程序-一個todo應用程序,我不知道如何編寫執行此操作的函數。 我在Django文檔和其他相關討論中找到了一些東西,但這是行不通的。
這是我的代碼:
#models.py
class Task(models.Model):
user = models.ForeignKey(User)
task = models.CharField(max_length=200)
initialized_at = models.DateTimeField(auto_now_add=True)
due_date = models.DateField(default=datetime.now)
done = models.BooleanField(default=False)
def __unicode__(self):
return self.task
#views.py
def edit_task(request, id):
if request.method == 'POST':
task_to_edit = Task.objects.get(pk=task_id)
form = TaskForm(request.POST, instance=task_to_edit)
form.save()
if form.is_valid():
task_to_edit = form.save()
return HttpResponseRedirect('/')
else:
form = TaskForm()
return render(request, 'todo/edit_task.html', {'form': form})
#urls.py
url(r'^edit_task/(?P<task_id>\w+)/$', 'todo.views.edit_task')
#edit_task.html
{% block content %}
<form action="/edit_task/" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
{% endblock content %}
當我提交更新的表格時,出現此錯誤:
Page not found (404)
Request Method: POST
Request URL: hxxp://127.0.0.1:8000/edit_task/
Django使用jbz.urls中定義的URLconf,按以下順序嘗試了以下URL模式:
^admin/
^$ [name='index']
^(?P<task_id>\d+)/$
^(?P<task_id>\d+)/$
^add-task/$
^delete-task/(?P<task_id>\w+)/$
^edit_task/(?P<id>\w+)/$
^done/(?P<task_id>\d*)/$
當前網址edit_task/
與其中任何一個都不匹配。
根urls.py看起來像:
url(r'', include('todo.urls'))
#edit_task.html
{% block content %}
<form action="/edit_task/{{task.id}}" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
{% endblock content %}
請注意,我是如何在<form action="/edit_task/{{task.id}}" method="post">
添加{{task.id}}
表達式的
重要說明:將{{task.id}}
替換為在模板中完成此操作的任何變量。
出現錯誤的原因是因為edit_task/
沒有得到另一部分task_id
以匹配正則表達式:
url(r'^edit_task/(?P<task_id>\w+)/$', 'todo.views.edit_task')
更新:同樣,您的edit_task
視圖也有潛在的錯誤>
def edit_task(request, id):
task_to_edit = Task.objects.get(pk=id)
if request.method == 'POST':
form = TaskForm(request.POST, instance=task_to_edit)
form.save()
if form.is_valid():
task_to_edit = form.save()
return HttpResponseRedirect('/')
else:
form = TaskForm(instance=task_to_edit)
# you don't pass any task variable to the view so the form view
# won't know which task to edit, you'll have to handle that
return render(request, 'todo/edit_task.html', {'form': form, 'task':task_to_edit})
注意:我稍微糾正了視圖中的代碼。 現在,當通過GET
請求視圖時, task_to_edit
也將傳遞到表單以填充字段。 請注意,為了訪問此視圖,瀏覽器中的網址應如下所示http://www.example.com/edit_task/2
否則,如果您嘗試訪問http://www.example.com/edit_task
而不傳遞ID,則會收到錯誤404 。
希望這可以幫助!
我認為您的編輯任務模式需要一個ID-任務名稱。 嘗試更改您的網址格式:
'^edit_task/(?P<task_id>\w+)/$'
至
'^edit_task/$'
或提供您要編輯的任務ID。
只需在您的網址中添加名稱空間,然后根據您的模板進行更新即可。
#urls.py
url(r'^edit_task/(?P<task_id>\w+)/$', 'todo.views.edit_task', name= "edit_task")
#edit_task.html
{% block content %}
<form action="{% url 'edit_task' task_id %}" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
{% endblock content %}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.