我有一个简单的Django模型,其中包含一些互联网会话(Radius日志)。我想在我的模板中展示它。
models.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'
view.py:
def ajax_radius_sessions(request, username):
radius_sessions = Radacct.objects.filter(username=username).order_by('-radacctid')
template.html:
{% for session in radius_sessions %}
{{ session.username }}, {{ session.nasipaddress }}</br>
{% endfor %}
在我的模板中,我需要展示基于用户 IP 地址(nasipaddress)的主机名。
方法 1:
创建模型方法。
我不想将主机名计算为模型方法,因为它会针对每个记录触发,而特定用户的会话数可能非常大,在这种情况下,它将导致大量的 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 %}循环中访问它在模板中?
再次说明:似乎我不能将其作为模型的方法,因此我认为我应该用自定义的结果扩展我的数据库结果。
P.S. 很抱歉这篇文章太长了。这是我在Stackoverflow上的第一次尝试。谢谢!