【发布时间】:2013-08-04 17:09:26
【问题描述】:
我是 Django 新手,我正在尝试让用户从选项下拉列表中进行选择,然后将他们的选择传递给我的下一个视图类,以便可以编辑记录。现在我的代码传递了疾病的名称,但没有传递数据库中的 PK。这似乎是一个简单的问题,但我不知道如何解决它。我收到以下错误:
Reverse for 'drui' with arguments '('',)' and keyword arguments '{}' not found.
代码如下:
views.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))
forms.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”的反向,参数“(”,)”和关键字参数“{}”未找到。
【问题讨论】:
-
urls.py 呢?您还安装了任何第三方应用程序吗?
-
我刚刚添加了我的 urls.py 和 HTML sn-ps。我没有安装任何 3rd 方应用程序。我从另一个帖子中读到我的 disease_id 可能没有 id 属性,这就是它没有通过 PK 的原因。我不确定这是否正确或如何解决它
-
尝试为视图函数参数和 url 正则表达式定义使用相同的名称,例如
url(r'^drui/(?P<disease_id>\d+)..和def drui(request, disease_id): -
感谢 vikki,我对视图函数和 url 正则表达式定义使用相同的 id。我更新了上面的代码以反映这一点。如果这很有价值,我正在使用 django 1.4。我知道 1.5 中的 url 处理存在一些差异,人们倾向于使用 {% load url from future %}。但是,我得到了同样的错误
-
您已更改您的应用程序。您最初想提交给
drui,但现在提交给drui_index,是的,错误消失了,但这不是您想要的工作流程吗?
标签: django