0

私は過去 1 日間このエラーに遭遇しており、解決できないようです。

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

私の目標は、ユーザーに drui_index ページから疾患を選択してもらうことです。次に、ユーザーは drui ページに移動して、インジケーターを追加または編集します。私のモデルでは、疾患ごとに複数の指標があります。drui ページにアクセスすると、上記のエラーが表示されますが、その理由がわかりません。エラーの '7' は疾患テーブルの PK です。

Views.py

def drui_index(request):
   disease_list = Disease.objects.all()
   context = {'disease_list':disease_list}
   return render(request, 'drui_index.html', context)


def drui(request, disease_id):
   disease = get_object_or_404(Disease, pk=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)
         indicatorInlineFormSet.save()
         return HttpResponseRedirect(reverse('drui', kwargs={'disease_id':disease_id}))

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

   return render(request, 'drui.html', {'disease':disease, 'diseaseForm':diseaseForm, 'indicatorInlineFormSet': indicatorInlineFormSet}) 

HTML drui.html

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

urls.py

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

フォーム.py

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

    class Meta:
       model = Disease

IndicatorFormSet = inlineformset_factory(Disease, 
    Indicator,
    can_delete=False,
    extra=MAX_INDICATORS)

私のviews.pyでは、drui_indexですでに病気を選択しているので、diseaseFormを呼び出す必要はないと思います。ただし、それが問題を引き起こしているとは思いません。

4

2 に答える 2

3

URL名を引用符で囲んでいないと思います:

{% url drui disease.id %}

(django >= 1.5 を使用している場合) または{% load url from future %}テンプレートで使用する必要があります。

{% url "drui" disease.id %}
于 2013-08-04T23:32:39.523 に答える
3

キーワード引数を渡す必要があるため、urlタグは にする必要があります。{% url "drui" disease_id=disease.id %}

詳細については、ドキュメントを参照してください。

新しいエントリを保存することはないので、フォームを使用して を表示しているだけだと思います。ModelChoiceFieldその場合、 は必要ありませんModelForm

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

そうすれば、その部分を回避できますcommit=False

あなたは常にあなたのelseために持っているべきですif form.is_valid():

from django.shortcuts import redirect

def drui(request, disease_id):
   disease = get_object_or_404(Disease, pk=disease_id)
   ctx = {}
   ctx['disease'] = disease  
   ctx['indicatorInlineFormSet'] = IndicatorFormSet()
   ctx['diseaseForm'] = DiseaseForm()

   if request.method == "POST":

      diseaseForm = DiseaseForm(request.POST)
      indicatorInlineFormSet = IndicatorFormSet(request.POST, request.FILES)

      if diseaseForm.is_valid():
         return redirect('drui', disease_id=disease_id)
      else:
         # Form wasn't valid, return the same view to display the errors
         ctx['diseaseForm'] = diseaseForm
         ctx['indicatorInlineFormset'] = indicatorInlineFormset 
         return render(request, 'drui.html', ctx)

   else:

       return render(request, 'drui.html', ctx)
于 2013-08-04T23:38:00.537 に答える