我有简单的 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。谢谢!