Django:通用详细信息视图必须使用对象pk或slug调用IDView

时间:2014-02-06 22:09:40

标签: django django-views

我正在尝试根据参数中的值使用详细视图。

URL:

url(r'^mousesmall/(?P<name>.*)/$', IDView.as_view()),

视图:

class IDView(DetailView):
    model = RNA
    template_name = "home/details.html"
    def get_context_data(self, **kwargs):
        context = super(IDView, self).get_context_data(**kwargs)
        data = self.kwargs['name']
        context['object'] = RNA.objects.filter(rna_id=data)
        return context

我不确定如何使用对象pk调用视图。

1 个答案:

答案 0 :(得分:12)

您需要在基于类的视图上设置slug_field,以便它知道您正在考虑哪个字段作为slug(我认为在您的情况下为rna_id。您还需要设置{ {3}}在您的情况下,因为您使用name作为URLConf值

class IDView(DetailView):
    model = RNA
    template_name = "home/details.html"
    slug_field = 'rna_id'
    slug_url_kwarg = 'name'

您现在无需覆盖get_context_object。您还应该为您的网址命名:

url(r'^mousesmall/(?P<name>.*)/$', IDView.as_view(), name="rna_detailview"),

因此在模板中反转更容易:

{% url 'rna_detailview' name=myobject.rna_id %}