我有简单的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-address(nasipaddress)显示主机名。
方法1: 创建模型的方法。
我不想将Hostname计算为Model的方法,因为它将针对每条记录触发,但特定用户的会话数量可能非常大 - 在这种情况下会导致大量的DNS检查。 1000个会话= 1000个DNS检查?..
方法2a: 查看级别。
我在View级别尝试这个,只检查唯一的IP并获得带有IP-Hostname对的“本地”字典:
#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%}循环中的模板中访问它的正确方法是什么?
再说一遍:我似乎无法将其作为Model的方法,因此我认为我应该使用自定义的方法扩展我的数据库结果。
P.S。对不起,这是一个非常宽松的帖子。这是我对Stackoverflow的第一次尝试。谢谢!
答案 0 :(得分:2)
模型“方法”。创建一个单独的类,负责查找DNS条目并缓存它们,并在模型的描述符中引用此类的实例。