3

我有简单的 Django 模型和一些互联网会话(半径日志)。并想在我的模板中显示它。

模型.py:

class Radacct(models.Model):
    radacctid = models.BigIntegerField(primary_key=True)
    username = models.CharField(max_length=253)
    nasipaddress = models.IPAddressField()
    class Meta:
        db_table = u'radacct'

视图.py:

def ajax_radius_sessions(request, username):
    radius_sessions = Radacct.objects.filter(username=username).order_by('-radacctid')

模板.html:

{% for session in radius_sessions %}
    {{ session.username }}, {{ session.nasipaddress }}</br>
{% endfor %}

在我的模板中,我还需要根据用户的 IP 地址(nasipaddress)显示主机名。

方法一: 创建模型的方法。

我不想将 Hostname 计算为 Model 的方法,因为它会为每条记录触发,但特定用户的会话数可能非常大——在这种情况下,它会导致大量的 DNS 检查。1000 个会话 = 1000 个 DNS 检查?...

方法 2a: 视图级别。

我试图在视图级别进行此操作,以仅检查唯一 IP 并获取带有 IP-主机名对的“本地”字典:

#servers={'192.168.100.1':'alpha', '192.168.100.2':'beta', '192.168.100.3':'gamma'}

但我无法在模板中访问这个字典,使用键作为变量:

#Wrong!
{{ servers[session.nasipaddress] }}

方法 2b: 视图级别。向 Queryset 实例添加新属性。

也许我可以向未与数据库连接的 Radacct 模型添加一个新属性。并在我的视图中按主机名填写?

计算某些“属性”然后在 Queryset {% for %} 循环中的模板中访问它的正确方法是什么?

再说一遍:似乎我不能作为模型的方法来做到这一点,所以我认为我应该用自定义的结果来扩展我的数据库结果。

PS对不起,一个非常冗长的帖子。这是我第一次尝试 Stackoverflow。谢谢!

4

1 回答 1

2

模型“方法”。创建一个单独的类,负责查找 DNS 条目并缓存它们,并在模型的描述符中引用此类的实例。

于 2013-05-17T08:30:55.383 回答