python - 使用类列表作为 django_tables2 中表类的模型
问题描述
我尝试使用与我在 django 中的数据库无关的类创建一个表,并且该类存储在models.py
如下所示(InfoServer
是类)。我想做的是使用这个类来填充我的表django_tables2
。添加models.Model
为参数不是一个选项,因为我不想将此类保存在数据库中。
每当我定义model = InfoServer
in 时,tables.py
我都会收到此错误,我想这是因为InfoServer
没有将models.Model
其作为参数。
TypeError:“object”对象的描述符“ repr ”需要一个参数
任何帮助表示赞赏。
模型.py
class TestServeur(models.Model):
nom = models.CharField(max_length=200)
pid = models.CharField(max_length=200)
memoire = models.IntegerField(null=True)
class InfoServer:
# "This is a class to test my knowledge of python"
def __init__(self,p = '',c = 0,m = 0):
self.pid = p
self.cpu = c
self.memoire = m
def getData(self):
return ("A server with %s memory and %s cpu" % (self.cpu,self.memoire))
视图.py
def index(request):
return HttpResponse("Hello, world. You're at the index.")
def cpu_view(request):
liste = []
proc1 = Popen(['ps','-eo','pid,%cpu,%mem,comm'], stdout=PIPE, stderr=PIPE)
proc2 = Popen(['grep','java'], stdin=proc1.stdout, stdout=PIPE)
proc1.stdout.close()
for line in iter(proc2.stdout.readlines()):
clean_line = line.decode("utf-8")
info_utiles = clean_line.split()
pid,cpu,mem,*rest = info_utiles
i1 = InfoServer(pid,cpu,mem)
liste.append(i1)
table = TestServeur(liste)
RequestConfig(request).configure(table)
return render(request, 'server/cpu.html', {'output': table})
表格.py
class TableServeur(tables.Table):
class Meta:
# model = InfoServer
fields = ['pid', 'memory', 'cpu']
template_name = 'django_tables2/bootstrap4.html'
解决方案
如我所见,InfoServer
类不是 Django 模型。另外,我认为您无论如何都不需要直接使用它。因此,您可以简单地提供一个带有字典的列表,并在带有表格的模板中呈现它。
首先,我们需要更新 Table 类并从中删除 Meta 类,因为我们不会使用任何 django 模型。
class TableServeur(tables.Table):
pid = tables.Column()
memory = tables.Column()
cpu = tables.Column()
InfoServer
现在,添加一个新的对象方法来从类中返回字典:
class InfoServer:
# "This is a class to test my knowledge of python"
def __init__(self,p = '',c = 0,m = 0):
self.pid = p
self.cpu = c
self.memoire = m
def getData(self):
return ("A server with %s memory and %s cpu" % (self.cpu,self.memoire))
def get_dict_data(self):
return {'pid': self.pid, 'cpu': self.cpu, 'memory': self.memoire}
最后,更新视图:
for line in iter(proc2.stdout.readlines()):
clean_line = line.decode("utf-8")
info_utiles = clean_line.split()
pid,cpu,mem,*rest = info_utiles
i1 = InfoServer(pid,cpu,mem)
liste.append(i1.get_dict_data())
table = TestServeur(liste)
return render(request, 'server/cpu.html', {'output': table})
documentation
有关如何使用数据填充表格的更多信息。
推荐阅读
- c++ - 如何在 C++ 中将 OpenCV 2D 矩阵转换为 1D 数组?
- python - 当出现 FileNotFoundError 异常时,我应该使用 file.close() 关闭文件吗?
- python - discord.py 问题:如何在不和谐中检查第一个加入语音聊天的用户
- java - Android-Java无法写入firebase实时数据库
- amazon-s3 - 如何从无服务器 lambda 函数访问 s3?
- react-native - Expo & ReactNative 调试器如何使状态可见?
- javascript - 检查 Android WebView 中是否存在 Javascript 函数
- blackjack - 如何在二十一点游戏中增加计算机的机会?
- android - 如何让 Bootstrap 差距在移动设备上工作
- tensorflow - Keras 模型 val_accuracy 1.00,测试时输出错误