3

いくつかのインターネット セッション (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 の最初の試みです。ありがとうございました!

4

1 に答える 1

2

モデル「方法」。DNS エントリの検索とキャッシュを担当する別のクラスを作成し、モデルの記述子でこのクラスのインスタンスを参照します。

于 2013-05-17T08:30:55.383 に答える