Я пытаюсь получить столбцы, необходимые для таблицы, из модели.Работает нормально.Но когда я изменяю данные модели, откуда берутся столбцы, сервер должен быть перезапущен, чтобы он вступил в силу.
tables.py:
class InventoryTable(tables.Table):
ip_addr = tables.Column(linkify=("detailed_view", (tables.A("ip_addr"), )))
class Meta:
a = Inventory_views.objects.get(view_name="default")
activeList = []
for field in a._meta.fields:
if field.name != "default" and (getattr(a, field.name) == True):
activeList.append(field.name)
activeTuple = tuple(activeList)
model = Inventory_basic
template_name = 'django_tables2/bootstrap.html'
fields = (activeTuple)
views.py:
def inventory_v2(request):
if 'search_query' in request.GET:
form = searchForm(request.GET)
if form.is_valid():
search_query = form.cleaned_data.get('search_query')
table = InventoryTable(Inventory_basic.objects.filter(ip_addr__icontains=search_query))
RequestConfig(request).configure(table)
return render(request, 'jd_inventory_v2.html', {'table': table, 'form': form})
else:
form = searchForm()
table = InventoryTable(Inventory_basic.objects.filter(ip_addr__icontains="NULL"))
RequestConfig(request).configure(table)
return render(request, 'inventory_v2.html', {'table': table, 'form': form})
models.py:
class Inventory_views(models.Model):
view_name = models.CharField(max_length=25,default="NA", verbose_name='View Name')
hw_serialno = models.BooleanField(default=True, verbose_name='Hardware SN')
location = models.BooleanField(default=True, verbose_name='Location')
ip_addr = models.BooleanField(default=True, verbose_name='IP Address')
ОБНОВЛЕНИЕ:
Мне удалось найти другой способ сделать это, используя метакласс из этого примера: https://stackoverflow.com/a/703888/1998915
Новый код: tables.py:
class InventoryTable(tables.Table):
def __init__(self, *args, **kwargs):
exclude_list=kwargs.pop('exclude_list', '')
super(InventoryTable, self).__init__(*args, **kwargs)
for field in exclude_list:
del self.fields[field]
class Meta:
model = Inventory_basic
views.py:
def jd_inventory_v2(request):
if 'search_query' in request.GET:
form = searchForm(request.GET)
if form.is_valid():
search_query = form.cleaned_data.get('search_query')
table = InventoryTable(Inventory_basic.objects.filter(ip_addr__icontains=search_query),exclude_list=inactiveFields)
RequestConfig(request).configure(table)
return render(request, 'jd_inventory_v2.html', {'table': table, 'form': form})
else:
form = searchForm()
inactiveFields = viewFilter()
table = InventoryTable(data=Inventory_basic.objects.filter(ip_addr__icontains="NULL"), exclude_list=inactiveFields)
RequestConfig(request).configure(table)
return render(request, 'jd_inventory_v2.html', {'table': table, 'form': form})
Но теперь появляется ошибка: объект 'InventoryTable' не имеет атрибута 'fields'