如果 url 中没有 pk,Django DetailView 显示最后

Django DetailView show last if no pk in url

使用基于 class 的 DetailView 有没有办法在调用 url 时说 "if no pk is specified",只需使用 MyModel.object.last() 作为对象引用?

url(r'^(?:(?P<pk>\d+)/)?detail/$', views.MyDetailView.as_view()),

class MyDetailView(DetailView):
    model = MyModel
    if self.kwargs['pk'] == False:
       self.object = MyModel.object.last()

我是 运行 Django 1.11

您可以覆盖 get_object 方法。请注意,您应该检查 pk 是否设置在 self.kwargs 中,而不是它是否等于 False.

def get_object(self):
    if 'pk' not in self.kwargs:
        return MyModel.objects.last()
    return super(MyDetailView, self).get_object()