python - 有没有更好的方法在 Django admin 中显示来自 Django 模型的附加信息
问题描述
有没有更好的方法通过将“CONN”移动到仍然可以使用但只需要编写一次的地方来减少代码的重复性。所以我仍然可以在 django admin 的相同字段中显示相同的信息。
当我将“CONN”移动到其他地方时,该功能停止工作。并显示错误。
模型.py
from .connection import HostConn
class Host(models.Model):
name = models.CharField(max_length=20)
hostname = models.CharField(max_length=20)
login = models.CharField(max_length=20)
password = models.CharField(max_length=14, blank=True, null=True)
conntype = models.CharField(max_length=7, choices=CONN_SELECT)
def __str__(self):
return self.name
def status(self):
conn = HostConn(self.hostname, self.login, self.password, self.conntype)
status = conn.host_up()
return status
def cpu(self):
conn = HostConn(self.hostname, self.login, self.password, self.conntype)
return conn.get_host_info()[0]
def memory(self):
conn = HostConn(self.hostname, self.login, self.password, self.conntype)
return conn.get_host_info()[1]
def free_memory(self):
conn = HostConn(self.hostname, self.login, self.password, self.conntype)
return conn.get_host_info()[2]
管理员.py
class HostAdmin(admin.ModelAdmin):
list_display = ('name', 'hostname', 'conntype', 'status', 'cpu', 'memory', 'free_memory', 'options')
解决方案
property
你可以在你的Host
模型上定义一个:
from .connection import HostConn
class Host(models.Model):
name = models.CharField(max_length=20)
hostname = models.CharField(max_length=20)
login = models.CharField(max_length=20)
password = models.CharField(max_length=14, blank=True, null=True)
conntype = models.CharField(max_length=7, choices=CONN_SELECT)
def __str__(self):
return self.name
@property
def conn(self):
return HostConn(self.hostname, self.login, self.password, self.conntype)
def status(self):
return self.conn.host_up()
def cpu(self):
return self.conn.get_host_info()[0]
def memory(self):
return self.conn.get_host_info()[1]
def free_memory(self):
return self.conn.get_host_info()[2]
有关属性的更多信息,请参见此处。
如果您担心对该conn
函数进行不必要的多次调用,您可以使用lru_cache
例如来记忆它。有关更多信息,请参阅Python 文档的这一部分。
推荐阅读
- javascript - 如何使标题出现在css中div框的顶部
- python - 搜索时使用 pytube 进行线程化
- mod-rewrite - AEM:资产的 URL 缩短
- javascript - 将书签存储在 chrome 根文件夹之外?
- amazon-web-services - AWS Sam delpoy 失败
- node.js - 服务器选择在 30000 毫秒后超时堆栈:MongooseServerSelectionError:服务器选择在 30000 毫秒后超时
- python - 使用python在kivy上打开相机on_pressed
- entity-framework - 如何在 EF 存储库模式中使用 2 个表达式
- jsonpath - 使用 JSONPath 将过滤器应用于对象内的实体
- sql - SQL Server - 加入问题