我面臨着一個非常奇怪的行爲Django
和Django-tables2
。Django-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」這個創建單獨的表,但我還是好奇導致了這一問題。我的同事在他的電腦上遇到了同樣的問題。
的問題是,這種方法有異常>>值:\t 不能設置屬性<<。這就是我使用base_columns的原因。我在多個地方找到了它:https://stackoverflow.com/a/29747086/3371056或http:// ruddra。com/2015/09/18/make-a-blog-using-django-part-1/ –
更改'base_column'可能會在多處提示,但正如我所解釋的,我認爲改變它是一個錯誤,重新修改班級。嘗試在列上設置'header'而不是'verbose_name'。 – Alasdair
爲什麼不只是使用兩個不同的表定義? – Jieter