我有以下观点:
def default_new (request):
if request.method == "POST":
post = EquipmentForm(request.POST)
if form.is_valid():
post.save()
return HttpResponseRedirect(reverse('calbase:default_detail', args=(id,)))
else:
form = EquipmentForm()
return render(request, 'calbase/default_edit.html', {'form':form})
class default_detail (generic.DetailView):
model = Equipment
template_name = 'calbase/default_detail.html'
并且网址:
urlpatterns = [
url(r'^$', views.default, name = 'default'),
url(r'^default/((?P<id>\d+)/$)', views.default_detail.as_view(), name = 'default_detail'),
url(r'^default/new/$', views.default_new, name = 'default_new'),
]
我想在这里做的只是接受表单输入,保存,然后重定向到其详细视图。但是,虽然表单已正确保存,但它总是给我错误:
NoReverseMatch at /calbase/default/new/
Reverse for 'default_detail' with arguments '(<built-in function id>,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['calbase/default/((?P<id>\\d+)/$)']
有人可以帮我弄清楚这里有什么不对吗?
答案 0 :(得分:3)
问题是您使用的是id
,这是一个内置功能。</ p>
当您致电form.save()
时,它会返回Post
个实例。如果您愿意,可以使用post.id
(或post.pk
)来获取帖子的ID。
def default_new(request):
if request.method == "POST":
form = EquipmentForm(request.POST)
if form.is_valid():
post = form.save()
return HttpResponseRedirect(reverse('calbase:default_detail', args=(post.id,)))
您的网址格式中也有太多括号。它应该是:
url(r'^default/(?P<id>\d+)/$', views.default_detail.as_view(), name = 'default_detail'),