0

私はDjangoを初めて使用し、ユーザーに選択肢のドロップダウンから選択させ、その選択肢を次のビュークラスに渡して、レコードを編集できるようにしようとしています。現在、私のコードは病気の名前を渡しますが、データベースからの PK は渡しません。単純な問題のように思えますが、解決方法がわかりません。次のエラーが表示されます。

 Reverse for 'drui' with arguments '('',)' and keyword arguments '{}' not found.

コードは以下のとおりです。

ビュー.py

def drui_index(request):
    diseaseForm = DiseaseForm(request.POST)

    if diseaseForm.is_valid():
       #the problem is probably in the below line. The code isn't right.
       new_disease = diseaseForm.cleaned_data['disease']
       url = reverse('drui', kwargs={'someApp_disease_id': new_disease.pk})
       return HttpResponseRedirect(url)

    else:
       diseaseForm = DiseaseForm()

    return render_to_response("drui_index.html", {'diseaseForm': diseaseForm}, context_instance=RequestContext(request))



def drui(request, someApp_disease_id):

    disease = get_object_or_404(Disease, pk=someApp_disease_id

    if request.method == "POST":

       diseaseForm = DiseaseForm(request.POST, instance=disease)
       indicatorInlineFormSet = IndicatorFormSet(request.POST, request.FILES, instance=disease) 
       if diseaseForm.is_valid():
          new_disease = diseaseForm.save(commit=False)   

          if indicatorInlineFormSet.is_valid():
             new_disease.save()
             indicatorInlineFormSet.save()
             return HttpResponseRedirect(reverse(valdrui))

    else:
       diseaseForm = DiseaseForm(instance=disease)
       indicatorInlineFormSet = IndicatorFormSet(instance=disease)

    return render_to_response("drui.html", {'diseaseForm': diseaseForm, 'indicatorInlineFormSet': indicatorInlineFormSet, 'hide_breadcrumb': hide_breadcrumb},context_instance=RequestContext(request))   

フォーム.py

class DiseaseForm(forms.ModelForm):
disease = forms.ModelChoiceField(queryset=Disease.objects.all())

class Meta:
   model = Disease

urls.py

 url(r'^drui_index/$', 'someApp.views.drui_index', name='drui_index'),
 url(r'^drui/(?P<someApp_disease_id>\d+)/$', 'someApp.views.drui', name='drui')

drui.html の HTML

<form class="disease_form" action="{% url drui someApp_disease_id %}" method="post">{% csrf_token %}
    {{ diseaseForm.as_table }}
    {{ indicatorInlineFormSet.as_table }}

drui_index.html の HTML

<form class="disease_form" action="{% url drui_index %}" method="post">{% csrf_token %}
 {{ diseaseForm.as_table }}

アップデート

kwargs に .pk を追加して解決しました。しかし、今では、引数 '('',)' とキーワード引数 '{}' が見つからない 'drui' の逆を取得します。

4

3 に答える 3

0

「drui」は、views.py の別のメソッドであり、diseaseForm.is_valid() のときにリダイレクトする別のテンプレートを含むと思います。

ビュー.py

from django.core import urlresolvers
def drui_index(request):
diseaseForm = DiseaseForm(request.POST)

if diseaseForm.is_valid():
   new_disease = diseaseForm.cleaned_data['disease']
   url = urlresolvers.reverse('drui', kwargs={'disease_id': new_disease})
   return HttpResponseRedirect(url)

else:
   diseaseForm = DiseaseForm()

return render_to_response("drui_index.html", {'diseaseForm': diseaseForm}, context_instance=RequestContext(request))
于 2013-08-04T18:04:27.493 に答える
0

drui.htmlコンテキストに存在しないものを参照している場合、これsomeApp_disease_idにより最初のエラー、元の質問のエラーが発生します。これを修正するには、単に使用可能にします。

この変数にどの ID を格納する必要があるかはわかりませんが、druiビューには次のようなものが必要です

return render_to_response("drui.html", 
              {'diseaseForm': diseaseForm,
              'indicatorInlineFormSet': indicatorInlineFormSet,
              'hide_breadcrumb': hide_breadcrumb,
              'someApp_disease_id': new_disease.id}, //<<-add this
              context_instance=RequestContext(request))

ビューに追加.pkするとdrui_index、他の問題 ( "Reverse for 'drui' with arguments '()' and keyword arguments '{'someApp_disease_id': <Disease: someDisease>}' not found.") が修正され、上記で修正した 2 番目のエラーに進むことができました。したがって、基本的には上記をに追加し、 indruiのままにする必要があります。それはあなたの問題を治すはずです。.pkdrui_index

于 2013-08-05T13:44:32.713 に答える