Django类视图反向URL报错:无法匹配带id的read_hairbty路由
问题原因
read_hairbty的URL路由要求必须传入pk参数(对应会员ID),但你在HBTYOrderView中直接用reverse_lazy('read_hairbty')生成成功跳转地址时,没有传递这个必填参数,导致Django无法匹配到对应的路由规则。
解决方法
重写HBTYOrderView的get_success_url方法,根据刚创建的预约关联的会员ID生成正确的跳转地址:
class HBTYOrderView(BSModalCreateView): model = HbtyOrder template_name = 'accounts/modals/hairbty/create_hbtyordr.html' form_class = HairbtyOrderForm success_message = 'Success: Appointment was created.' # 替换原success_url属性,重写get_success_url方法 def get_success_url(self): # 获取当前创建的预约所属的会员ID customer_id = self.object.hbtycustomer_id # 传递pk参数生成正确路由地址 return reverse_lazy('read_hairbty', kwargs={'pk': customer_id})
额外检查点
- 确保
HairbtyOrderForm表单包含hbtycustomer_id字段(可设为隐藏字段),或在视图的form_valid方法中手动赋值该字段,否则self.object.hbtycustomer_id会为空,跳转仍会失败。 HBTYReadView中的pk_url_kwargs = 'hbtycustomer_id'是多余的,你的URL参数名为pk,且视图get_queryset已用self.kwargs['pk']取值,删除该属性可避免混淆。
内容的提问来源于stack exchange,提问作者d3vkidhash
相关产品推荐
相关产品推荐

