2016-08-16 7 views
1

私は次のビューがあります。django-python:NoReverseMatchの問題:どのような議論が必要ですか?

def default_detail (request, equipment_id): 
    equipment = Equipment.objects.get(id = equipment_id) 
    context = {'equipment' : equipment} 
    return render(request, 'calbase/default_detail.html', context) 


def default_add_cal (request, equipment_id): 
    equipment = get_object_or_404(Equipment, id = equipment_id) 
    EquipmentInlineFormSet = inlineformset_factory(Equipment, Calibration, fields = ('cal_by', 'cal_date', 'notes'), extra = 1,) 
    if request.method == "POST": 
     if 'calibration' in request.POST: 
      formset = EquipmentInlineFormSet(request.POST, request.FILES, instance=equipment) 
      if formset.is_valid(): 
       return HttpResponseRedirect(reverse('calbase:default_detail', args=(equipment_id))) 
    else: 
     formset = EquipmentInlineFormSet(instance=equipment) 
    return render(request, 'calbase/default_detail_cal.html', {'formset' : formset, 'equipment' : equipment}) 

とURLは、このようなものです:

urlpatterns = [ 
    url(r'^$', views.default, name = 'default'), 
    url(r'^default/(?P<equipment_id>[0-9]+)/$', views.default_detail, name = 'default_detail'), 
    url(r'^default/new/$', views.default_new, name = 'default_new'), 
    url(r'^default/(?P<equipment_id>[0-9]+)/cal/$', views.default_add_cal, name = 'default_add_cal'), 
] 

とdefault_add_cal、default_detail_cal.htmlのテンプレートは次のようである:

{% block content %} 
<form method="POST" action = "{% url 'calbase:default_add_cal' equipment.id %}">{% csrf_token %} 
     {{ formset }} 
     <button type="submit" class="save btn btn-default" name = "calibration">Save</button> 
    </form> 

<a href="{% url 'calbase:default' %}">Back?</a> 
{% endblock %} 

ので、キャリブレーションがされ機器への外部キー:機器にはいくつかのキャリブレーションがありますが、ここでは機器にキャリブレーションを追加できるようにインラインフォームセットを使用しようとしています。 '(' 1、 '4' ')」

NoReverseMatchで/ calbase /デフォルト/ 41/CAL/ 引数と 'default_detail' のリバース及びキーワード引数 '{}':問題は、私はこれを得たことです見つかりません。 1つのパターン(複数可)試してみました:[ 'calbase /デフォルト//$(P [0-9] +?)']

それは私を混乱させるその例えば、機器ID = 41、私は

を行うための
return HttpResponseRedirect(reverse('calbase:default_detail', args=(equipment_id))) 

実際に渡される引数は、41ではなく( '4'、 '1') 'です。これはどのようにすることができますか?私はこれをどうやって解決すべきでしょうか?ありがとう

答えて

1

タプルとして引数を渡す必要があります。それはequipment_idは、引数の一つであるとargs反復可能になるだろう:

args=(equipment_id,‌​) 
#    ^

は、これらのグループ化括弧は、引数タプルことはありません。

>>> args = (42) 
>>> type(args) 
<class 'int'> 
>>> 
>>> args = (42,) 
>>> type(args) 
<class 'tuple'> 

も、括弧なしで動作:

>>> args = 42, 
>>> type(args) 
<class 'tuple'> 
+0

ありがとう!それは私の問題を解決しました。この "、"の機能についてもっと詳しく教えてください。 –

+0

@HansongLiこれはタプルの定義方法です。シングルトンタプルを作成するには、そのカンマを追加する必要があります。私はいくつかのコードを追加しました。それが十分であれば教えてください –

+0

ああ、それは明確なことです。本当にありがとう! –

関連する問題