【发布时间】:2019-11-21 15:07:07
【问题描述】:
我正在尝试从模型中获取表所需的列。它工作正常。但是,当我更改从列获取的模型数据时,需要重新启动服务器才能使其生效。
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
新代码: 表.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”对象没有属性“字段”
【问题讨论】:
-
我不明白问题出在哪里。能不能描述的更清楚一点?
-
当然。所以我有来自模型“Inventory_basic”的表“InventoryTable”。所以该表包含许多变量,我不希望所有变量都一直显示。因此,他们取而代之的是从另一个模型中获取价值。这在第一次启动服务器时有效。当我更改“列模型”数据时,刷新网页不会使 django 重绘表格。只有重新启动才会重绘表格。
标签: python django django-tables2