首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django为“with参数”(7,)和关键字参数“{}”未找到而形成反向形式

Django为“with参数”(7,)和关键字参数“{}”未找到而形成反向形式
EN

Stack Overflow用户
提问于 2013-08-04 23:29:17
回答 2查看 184关注 0票数 0

在过去的一天里,我遇到了这个错误,似乎无法解决。

代码语言:javascript
复制
Reverse for '' with arguments '(7,)' and keyword arguments '{}' not found.

我的目标是让用户从我的drui_index页面中选择疾病。然后,用户被带到drui页面添加或编辑指示器。在我的模型中,每种疾病都有多种指标。当我到达drui页面时,我会得到上面的错误,并且不知道原因。错误中的'7‘是疾病表中的PK。

Views.py

代码语言:javascript
复制
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}) 

drui.html

代码语言:javascript
复制
 <form class="disease_form" action="{% url drui disease.id %}" method="post">{% csrf_token %}
  {{ disease }}
  {{ diseaseForm.as_table }}
  {{ indicatorInlineFormSet.as_table }}

urls.py

代码语言:javascript
复制
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'),

forms.py

代码语言:javascript
复制
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中,我不认为我需要调用diseaseForm,因为我已经在drui_index中选择了一种疾病。不过,我不认为这会造成问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-04 23:32:39

我想你漏掉了url名字的引号:

代码语言:javascript
复制
{% url drui disease.id %}

应该是(如果您正在使用django >= 1.5)或在模板中使用{% load url from future %}

代码语言:javascript
复制
{% url "drui" disease.id %}
票数 3
EN

Stack Overflow用户

发布于 2013-08-04 23:38:00

您的url标记应该是{% url "drui" disease_id=disease.id %},因为您需要传递关键字参数。

有关更多信息,请参见文档

由于您从未保存新条目,所以我认为您只是使用表单来显示ModelChoiceField,在这种情况下,您不需要ModelForm

代码语言:javascript
复制
class DiseaseForm(forms.Form):
    disease = forms.ModelChoiceField(queryset=Disease.objects.all())

这样,就可以避免commit=False部分。

您应该总是为您的else设置一个if form.is_valid()

代码语言:javascript
复制
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)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18048661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档