2016-08-12 3 views
1

나는 다음 뷰가 : 내가 여기서 뭘하고 싶은 무엇장고 - 파이썬 : 역 사용하지 않고 실패 : 어떤 역 일치를

urlpatterns = [ 
    url(r'^$', views.default, name = 'default'), 
    url(r'^default/((?P<id>\d+)/$)', views.default_detail.as_view(), name = 'default_detail'), 
    url(r'^default/new/$', views.default_new, name = 'default_new'), 
] 

단지에 걸릴 것입니다 :

def default_new (request): 
    if request.method == "POST": 
     post = EquipmentForm(request.POST) 
     if form.is_valid(): 
      post.save() 
      return HttpResponseRedirect(reverse('calbase:default_detail', args=(id,))) 
    else: 
     form = EquipmentForm() 
    return render(request, 'calbase/default_edit.html', {'form':form}) 

class default_detail (generic.DetailView): 
    model = Equipment 
    template_name = 'calbase/default_detail.html' 

및 URL 양식 입력을 저장하고 저장 한 다음 세부 정보보기로 리디렉션하십시오. 그러나 양식이 올바르게 저장 되더라도 항상 다음과 같은 오류가 표시됩니다.

NoReverseMatch at /calbase/default/new/ 
Reverse for 'default_detail' with arguments '(<built-in function id>,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['calbase/default/((?P<id>\\d+)/$)'] 

누군가가 여기에 무슨 문제가 있는지 알 수 있습니까?

답변

3

문제는 id입니다.이 기능은 내장 기능입니다.

form.save()으로 전화하면 Post 인스턴스가 반환됩니다. 게시물의 ID를 얻으려면 post.id (또는 원하는 경우 post.pk)을 사용하십시오.

def default_new(request): 
    if request.method == "POST": 
     form = EquipmentForm(request.POST) 
     if form.is_valid(): 
      post = form.save() 
      return HttpResponseRedirect(reverse('calbase:default_detail', args=(post.id,))) 

URL 패턴에 너무 많은 괄호가 있습니다. 그것은해야한다 :

url(r'^default/(?P<id>\d+)/$', views.default_detail.as_view(), name = 'default_detail'), 
+0

감사합니다,하지만 난 것을 시도 할 때, 내가 post'는 폼이 아니었다 '것을 발견하지 않았다 –

+1

"'EquipmentForm '개체가 어떤 속성'ID를 '이 없습니다"저를 제공하는' Post'. 그것은 매우 혼란 스럽다! 양식에'form'을 사용하고'Post' 인스턴스에'post'를 사용하면 코드를 더 쉽게 이해할 수 있습니다! 지금 대답을 업데이트했습니다. – Alasdair

+0

혼란을 드려 죄송합니다. 도와 주셔서 너무 감사드립니다. 나는 당신의 업데이 트를 시도하고 지금은 "(28,) '및 키워드 인수'{} '인수가없는'default_detail '에 대해 역방향입니다. \\ d +)/$) '] ". 문제가 URL에 있는지 궁금합니다. –