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

use*_*318 1 python django django-class-based-views

对于基于类的 DetailView,有没有一种方法可以在调用 url 时说“如果未指定 pk”,只需用作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()
Run Code Online (Sandbox Code Playgroud)

我正在运行 Django 1.11

Ala*_*air 6

您可以重写该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()
Run Code Online (Sandbox Code Playgroud)