2014-02-06 17 views
2

我試圖根據參數中的值使用詳細視圖。Django:通用細節視圖IDView必須使用對象pk或子彈來調用

網址:

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的看法。

回答

11

您需要設置slug_field您基於類的視圖,以便它知道你正在考慮哪些字段作爲蛞蝓(我覺得你的情況是rna_id。你還需要設置slug_url_kwarg你的情況爲你使用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 %} 
+0

你在解決方案中設置了slug_field兩次。在我的模板中翻轉它的目的是什麼?另外,如果這有所幫助,我的rna_id與我的主鍵不一樣。 – dl8

+0

對不起,這是一個錯字。反轉意味着獲取該對象的URL。你可以使用'url'模板標籤來查看你寫的視圖。在您的網址上使用「name」屬性時更容易完成。另一種方法是使用['get_absolute_url'](如果你的'IDView'有一個特定的url,你可以通過添加一個['get_absolute_url'](https://docs.djangoproject) .com/en/dev/ref/models/instances /#get-absolute-url)方法添加到你的類中。這就是你可以簡單地使用'myobject.get_absolute_url'來生成一個到你的頁面的鏈接 –

相關問題