2017-08-24 40 views
0

我面臨着一個非常奇怪的行爲DjangoDjango-tables2Django-tables2 - 刷新頁面後列名更改

我使用表來幫助呈現多種類型的文檔。

爲了簡單起見,有兩種類型的文件 - 'faktura'和'dobropis'。

'dobropis'必須有第一列標有「DobropisujemeVám」和「faktura」 - 「Názovpoložky」+這些列是平等的。

所以我檢查,如果文檔的類型是「faktura」或「dobropis」內部表__init__功能,並相應設置

self.base_columns['column'].verbose_name = ...

奇怪的是,它的作品,但只有在第二次刷新。

情況:我已經打開'faktura'頁面 - 我可以看到'Názovpoložky',沒關係。然後我打開'dobropis'頁面,然後再次看到'Názovpoložky'標籤。然後,如果我再次刷新,那就是'DobropisujemeVám'。然後,每次刷新後,我會看到正確的標籤 - 「DobropisujemeVám」。但是,如果我打開'faktura'頁面,第一次也會出現'DobropisujemeVám',在第二次刷新後它會正常。

class PolozkyTable(tables.Table): 
    nazov_polozky = tables.columns.Column(orderable=False) 
    pocet = tables.columns.Column(orderable=False) 
    jednotka = tables.columns.Column(orderable=False) 
    cena = tables.columns.Column(orderable=False, verbose_name=u'Jednotková cena') 
    zlava = tables.columns.Column(orderable=False) 
    dph = tables.columns.Column(orderable=False) 
    celkom = tables.columns.Column(orderable=False) 

    class Meta: 
     model = Polozka 
     fields = ['nazov_polozky', 'pocet', 'jednotka', 'cena', 'zlava', 'dph', 'celkom'] 
     attrs = {'class': 'table table-striped table-hover'} 

    def __init__(self, *args, **kwargs): 
     typ = kwargs.pop('typ') 
     super(PolozkyTable, self).__init__(*args, **kwargs) 
     if typ == 'dobropis': 
      self.base_columns['nazov_polozky'].verbose_name = u'Dobropisujeme Vám' 
      self.exclude = ['zlava', 'dph'] 
     else: 
      self.base_columns['nazov_polozky'].verbose_name = u'Názov položky' 


    def render_cena(self, record): 
     return '{} {}'.format(record.cena, record.doklad.get_fakturacna_mena_display().encode('utf-8')) 

    def render_celkom(self, record): 
     return '{} {}'.format(record.celkom, record.doklad.get_fakturacna_mena_display().encode('utf-8')) 


@login_required 
def doklad_detail(request): 
    doklad = get_object_or_404(Doklad, pk=request.GET.get('id')) 
    polozky_table = PolozkyTable(doklad.polozky.all(),typ=doklad.typ) 
    return render(request, 'pdf/{}_pdf_template.html'.format(doklad.typ), 
        {'doklad': doklad, 'polozky_table': polozky_table}) 

在這個項目中沒有緩存,我真的不知道它會是什麼。

你知道嗎?

編輯:

而且,當我重新啓動服務器後,打開 'faktura',它顯示了駝峯格式 'NázovPoložky' 而不是 'Názovpoložky'。這是另一個奇怪的事情,因爲我搜索整個項目的區分大小寫'NázovPoložky',並沒有這樣的字符串。

EDIT2:

我已經解決了「dobropis」這個創建單獨的表,但我還是好奇導致了這一問題。我的同事在他的電腦上遇到了同樣的問題。

回答

0

您不應該在__init__方法中修改base_columns - 您正在更改類的值,因此它也會影響其他視圖。

base_columnshave already been copiedsuper()之前調用它們,因此下次訪問視圖時只會顯示更改。

看起來你應該修改self.columns。這應該隻影響實例。嘗試設置header而不是verbose_name

self.columns['nazov_polozky'].header = u'Dobropisujeme Vám' 
+0

的問題是,這種方法有異常>>值:\t 不能設置屬性<<。這就是我使用base_columns的原因。我在多個地方找到了它:https://stackoverflow.com/a/29747086/3371056或http:// ruddra。com/2015/09/18/make-a-blog-using-django-part-1/ –

+0

更改'base_column'可能會在多處提示,但正如我所解釋的,我認爲改變它是一個錯誤,重新修改班級。嘗試在列上設置'header'而不是'verbose_name'。 – Alasdair

+0

爲什麼不只是使用兩個不同的表定義? – Jieter