2016-12-26 40 views
1

我想使用Django的UpdateView,但由於某種原因它不起作用。Django的UpdateView不工作

(URL.py) 
from django.conf.urls import url 
from . import views 
app_name='profiles' 
urlpatterns = [ 
url(r'^$', views.IndexView.as_view(),name='index'), 
url(r'^(?P<pk>[0-9]+)$',views.DetailView.as_view(),name='detail'), 
url(r'^task/add/$',views.TaskCreate.as_view(),name='task-add'), 
url(r'^task/(?P<pk>[0-9]+)$',views.TaskUpdate.as_view(), name='task-update'), 
url(r'^task/(?P<pk>[0-9]+)/delete/$',views.TaskDelete.as_view(), name='task-delete'),] 

下面是我的Html文件,其中我試圖添加一個「編輯」鏈接,它將重定向到UpdateView。

(Details.PY this already has the second url mapped) 
{% extends 'profiles/base.html' %} 
{% block body %} 
<H3>The total efforts are {{datamain.efforts}} {{datamain.status}} hours.</H3> 

<a href="{% url 'profiles:task-update' %}">Edit</a> 
    {% endblock %} 

下面是Views.py

class IndexView(generic.ListView): 
template_name = 'profiles/index.html' 
def get_queryset(self): 
    return Datamain.objects.all() 


class DetailView(generic.DetailView): 
    model = Datamain 
    template_name = 'profiles/details.html' 

class TaskCreate(CreateView): 
    model=Datamain 
    fields=['main_task','date_time','efforts','status'] 

class TaskUpdate(UpdateView): 
    model=Datamain 
    fields=['main_task','date_time','efforts','status'] 

class TaskDelete(DeleteView): 
    model=Datamain 
    success_url = reverse_lazy('profiles:index') 
    fields=['main_task','date_time','efforts','status'] 

當我運行它,然後轉到頁,它顯示錯誤「沒有反向匹配」

+0

什麼是瀏覽器中的網址? –

+0

@EvansMurithi「http://127.0.0.1:8000/home/2」,現在瘋狂的事情是,如果我使用「http://127.0.0.1:8000/home/task/2」它的作品,並去編輯頁面,但我必須在url中手動添加「任務」,這就是爲什麼我使用鏈接來執行相同操作。 –

+0

這是因爲'/ home/task/2'匹配url模式url(r'^ task /(?P [0-9] +)$',views.TaskUpdate.as_view(),name ='任務更新「),'。 '/ home/2'會匹配'url(r'^(?P [0-9] +)$',views.DetailView.as_view(),name ='detail'),' –

回答

1

你忘了傳遞url參數pk試這個:

<a href="{% url 'profiles:task-update' pk=datamain.id %}">Edit</a> 
+0

@ShobinParameswaran歡迎:) – neverwalkaloner