我面临Django
和Django-tables2
的非常奇怪的行为。
我使用表来帮助呈现多种类型的文档。
为简单起见,有两种类型的文件 - “faktura”和“dobropis”。
所以我正在检查,如果Document __init__
函数中的Document类型是'faktura'或'dobropis'并相应地设置
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 :(得分:0)
您不应该在base_columns
方法中修改__init__
- 您正在更改类的值,因此它也会影响其他视图。
base_columns
调用super()
have already been copied之前,您需要更改它们,因此更改只会在您下次访问视图时显示。
看起来您应该修改self.columns
。这应该只影响实例。尝试设置header
而不是verbose_name
。
self.columns['nazov_polozky'].header = u'Dobropisujeme Vám'