2017-09-27 3 views
0

/providers/121/update/ 에서 NoReverseMatch '(없음,)'인수가없는 'provider_update'에 대해 반대가 없습니다. 1 패턴 시도 : [제공자/(? P \ d +)/업데이트/']NoReverseMatch에서 데이터 소스를 전달하여 작업 방법을 형성하는 데 어려움이 있습니다.

URL이 식별되는 매개 변수를 찾을 수 없기 때문에 NoReverseMatch 오류가 발생하는 이유를 알고 있습니다. 그러나 필자는 매개 변수가 올바른보기로 전달되지 않는 이유를 이해하지 못합니다. 매개 변수 ID 또는 PK를 보유하고있는 var를 전달할 때 어떤 이유로 어떤 것도 None으로 인식합니다. 비슷한 질문을 보았지만 데이터를 양식 작업에 전달하는 데 문제가 없습니다. 어떤 도움을 주시면 감사하겠습니다 !! 감사합니다

partial_provider_update.html

<form method="post" action="{% url 'provider_update' form.instance.id %}" class="js-provider-update-form"> 
    {% csrf_token %} 
    <div class="modal-header"> 
    <h4 class="modal-title">Update Provider</h4> 
    </div> 
    <div class="modal-body"> 
    {% include 'providers/includes/partial_provider_form.html' %} 
    </div> 
    <div class="modal-footer"> 
    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
    <button type="submit" class="btn btn-primary">Update provider</button> 
    </div> 
</form> 

partial_provider_list.html

 {% for provider in object_list %} 
     <tr> 
      <td>{{ provider.id }}</td> 
      <td>{{ provider.name }}</td> 
      <td>{{ provider.organization }}</td> 
      <td>{{ provider.emr }}</td> 
      <td>{{ provider.date|date:"Y-m-d" }}</td> 
      <td style="width: 100px; vertical-align: center; padding-top: 9px"> 
       <button type="button" 
        style="height: 25px; font-size: 16px;width: 50px; padding: 0px" 
        class="btn btn-warning btn-sm js-update-provider" 
        data-url="{% url 'provider_update' provider.id %}"> 
         Edit 
       </button> 
      </td> 
     {% empty %} 
      <tr> 
       <td colspan="5" class="text-center bg-warning">No Providers</td> 
      </tr> 
     {% endfor %} 

urls.py

from django.conf.urls import url, include 
from django.views.generic import ListView, DetailView, TemplateView 
from providers.models import Provider 
from providers import views 

urlpatterns = [ 
    url(r'^$', ListView.as_view(queryset=Provider.objects.all().order_by("id"), template_name='providers/home.html')), 
    url(r'^create/', views.provider_create, name='provider_create'), 
    url(r'^(?P<pk>\d+)/update/', views.provider_update, name='provider_update'), 
] 

views.py

# -*- coding: utf-8 -*- 
from __future__ import unicode_literals 
from django.shortcuts import render, get_object_or_404 
from django.template.loader import render_to_string 
from django.http import JsonResponse 
from providers.models import Provider 
from .forms import ProviderForm 

def index(request): 
    return render(request, 'providers/home.html') 

def save_provider_form(request, form, template_name): 
    data = dict() 
    if request.method == 'POST':  
     if form.is_valid(): 
      form.save() 
      data['form_is_valid'] = True 
      object_list = Provider.objects.all() 
      data['html_provider_list'] = render_to_string('providers/includes/partial_provider_list.html', { 'object_list' : object_list }) 
     else: 
      data['form_is_valid'] = False 
    else: 
     form = ProviderForm() 
    context = {'form': form} 
    data['html_form'] = render_to_string(template_name, context, request=request) 
    return JsonResponse(data) 

def provider_create(request): 
    if request.method == 'POST': 
     form = ProviderForm(request.POST) 
    else: 
     form = ProviderForm() 
    return save_provider_form(request, form, 'providers/includes/partial_provider_create.html') 

def provider_update(request, pk): 
    provider = get_object_or_404(Provider, pk=pk) 
    if request.method == 'POST': 
     form = ProviderForm(request.POST, instance=provider) 
    else: 
     form = ProviderForm(instance=provider) 
    return save_provider_form(request, form, 'providers/includes/partial_provider_update.html') 

답변

1

문제는 save_provider_form() 기능입니다. GET입니다 request.method, 당신이 instance와 양식을 초기화하는 경우 provider_update() 함수에서

def save_provider_form(...): 

    if request.method == 'POST':  
     ... 
     else: 
      ... 
    else: 
     # ################### # 
     # HERE IS THE PROBLEM # 
     # ################### # 
     form = ProviderForm() # form is re-initialized with no instance 

하지만 save_provider_form()request.method 경우가 GET입니다, 당신은 다시 초기화 같습니다

아래이 코드 내 주석을 참조하십시오 양식이없는 양식. 따라서 idNone이므로 None입니다.

+1

와우. 그게 너무 거칠어. 나는 이것을 알아 내려고 3 시간 이상을 보냈다. 정말 고마워 –