我很高兴在Django中发现基于类的视图。它更适合我的小脑。
现在,我遇到了一种情况,我使用功能视图将用户引导到基于URL的两个参数的页面。
views.py
def step_detail(request, **kwargs):
course_pk = kwargs["course_pk"]
step_pk = kwargs["step_pk"]
step = get_object_or_404(Step, course=course_pk, pk=step_pk)
return render(request, "courses/step_detail.html", {"step": step})
urls.py
urlpatterns = [
...
path("courses/<int:course_pk>/<int:step_pk>/", views.step_detail, name='step'),
]
该文件说你只能通过&#34; pk&#34;或&#34; slug&#34;进入DetailView,但在这里我有两个参数,所以我运气不好。
在这里,仍然有一种优雅的方式来使用基于类的视图吗?
答案 0 :(得分:2)
尝试使用query_pk_and_slug=True
属性。只需使用slug_field
将course
字段设置为slug:
class StepDetailView(DetailView):
model = Step
query_pk_and_slug=True
slug_field = 'course'
slug_url_kwarg = 'course_pk'
pk_url_kwarg = 'step_pk'
答案 1 :(得分:1)
您可以覆盖get_object
根据您喜欢的任何内容进行查询。
def get_object(self, **kwargs):
return Step.objects.get(course=course_pk, pk=step_pk)