有没有更好的方法在Django管理中显示来自Django模型的附加信息

2024-09-30 16:20:33 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有更好的方法来减少代码的重复性,将“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')

Tags: selfhostreturnmodelsdefstatusloginpassword
1条回答
网友
1楼 · 发布于 2024-09-30 16:20:33

您可以在Host模型上定义property

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]

有关属性的详细信息,请参见here

如果您担心对conn函数进行不必要的多次调用,您可以使用lru_cache来记忆它。有关详细信息,请参见Python文档的this section

相关问题 更多 >