2015-10-23 53 views
5

我有一個表django的:Django的tables2的DetailView CBV將不顯示單個對象

import django_tables2 as tables 
from .models import Account 
from django_tables2.utils import A # alias for Accessor 


class AccountTable(tables.Table): 
    nickname = tables.LinkColumn('accounts:detail', args=[A('pk')]) 

    class Meta: 
     model = Account 
     attrs = {'class': 'table table-striped table-hover'} 
     exclude = ("created", "modified", "destination") 

視圖:

class DetailView(SingleTableMixin, generic.DetailView): 

    template_name = 'accounts/account_detail.html' 
    context_table_name = 'table' 
    model = Account 
    table_class = AccountTable 
    context_object_name = object 

    @method_decorator(login_required) 
    def dispatch(self, *args, **kwargs): 
     return super(DetailView, self).dispatch(*args, **kwargs) 

    def get_context_data(self, **kwargs): 
     context = super(DetailView, self).get_context_data(object=self.object) 
     context['title'] = 'Account Detail' 
     context['pk'] = self.kwargs.get(self.pk_url_kwarg, None) 
     return context 

和模板:

<!DOCTYPE html> 
{% extends "accounts/base.html" %} 
{% load django_tables2 %} 
{% load render_table from django_tables2 %} 
<title>Account Detail</title> 

{% block content %} 
<br> 
<br> 
<h1>{{ object.id }} : {{object.nickname}}</h1> 

<div> 
{% render_table table %}  
</div> 
{% endblock %} 

它正確地獲取對象pk和所有內容,但不會僅發送單個對象來填充表格。我知道它獲取對象,因爲object.id和object.nickname都能正確顯示。我知道有可能只顯示一個特定的對象,因爲我在同一個項目中有另一個應用程序,只顯示一個對象,如果你點擊鏈接,將你帶到DetailView(我借用的帳戶模型重新創建的模板)。但它只會顯示所有對象的表格。

如果需要,我可以提出請求數據。我可以向你保證,我已經看到模板上下文中的對象,而且它必須是或object.id不起作用。 django-tables2的訣竅是什麼?顯然我已經做過一次了!

回答

3

您可以覆蓋視圖的get_table_data方法,並返回要顯示的對象列表。

在這種情況下,您想要一個只有一個項目的列表,該對象來自DetailView

def get_table_data(self): 
    return [self.object] 
+0

當我嘗試,如果沒有支架我得到這個錯誤: 「數據必須是查詢集類(具有計數和ORDER_BY)或支持列表(數據) - 帳戶既沒有。」 然後,我看到你有一個支架,它的工作。謝謝! – mastachimp

+0

括號是必需的,因爲django-tables2期望'get_table_data'返回像查詢集或列表那樣的迭代,而不是單個對象。 – Alasdair