如何在Django中使用带自定义主键参数名的通用DetailView?
解决方案
当然可以不用把URL里的quiz_id改成默认的pk,只需给ResultsView添加pk_url_kwarg属性,指定它对应URL中的参数名即可:
class ResultsView(generic.DetailView): model = Quiz pk_url_kwarg = 'quiz_id'
原理说明
DetailView 默认会从URL中读取pk参数作为主键查询依据,当你使用了自定义的参数名称(比如这里的quiz_id),只需要通过pk_url_kwarg属性告诉视图:要使用URL里的quiz_id参数来获取主键值,进而查询对应的Quiz对象。
这样既保留了URL中参数名的描述性,又能正常使用DetailView的默认逻辑,无需额外编写查询代码。
内容的提问来源于stack exchange,提问作者fejyesynb
相关产品推荐
相关产品推荐

