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 %}
所以标定设备的外键:一台设备可以有多种校准,在这里我试图使用一个inlineformset来让用户为设备添加校准。问题是,我得到这个:
NoReverseMatch在/ calbase /默认/ 41/CAL/ 逆向关于 'default_detail' 与参数 '(' 4' , '1')”和关键字参数 '{}'未找到。 1个图案(多个)尝试:[ 'calbase /默认//$(P [0-9] +?)']
它混淆我,例如,对于设备ID = 41,当我做
return HttpResponseRedirect(reverse('calbase:default_detail', args=(equipment_id)))
实际传递的参数是'('4','1')'而不是41.这怎么可能?我应该如何解决这个问题?谢谢
谢谢!这解决了我的问题。请您详细介绍一下这个“,”的功能吗? –
@HansongLi这就是元组的定义。要创建一个单例元组,您需要添加该逗号。我添加了一些代码。让我知道如果这是足够的 –
哦,这确实清除了事情。非常感谢! –