簡體   English   中英

無法更新CharField-Django

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM