いくつかのインターネット セッション (Radius ログ) を持つ単純な Django モデルがあります。そしてそれを私のテンプレートに表示したい。
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'
ビュー.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 モデルに新しい属性を追加できるかもしれません。私のビューで、ホスト名で入力しますか?
いくつかの「属性」を計算し、クエリセット {% for %} ループのテンプレートでアクセスする適切な方法は何ですか?
繰り返しますが、モデルの方法としてこれを行うことはできないようです。そのため、データベースの結果をカスタムのもので拡張する必要があると思います。
PS 本当に長い投稿で申し訳ありません。これは、Stackoverflow の最初の試みです。ありがとうございました!