У меня есть простая модель Django с некоторыми интернет-сеансами (журналы Radius). И хочу показать это в моем шаблоне.Расширение Queryset модели с дополнительными атрибутами
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: Создание метода модели.
Я не хочу рассчитать имя хоста как метод модели, потому что он будет запущен для каждой записи, но количество сеансов для конкретного пользователя может быть очень большим - в этом случае это вызовет огромное количество 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%}?
Опять же: кажется, что я не могу сделать это как метод модели, поэтому я думаю, что я должен расширить результаты своей базы данных с помощью пользовательских.
P.S. Извините за пост на самом деле. Это моя первая попытка Stackoverflow. Спасибо!
Лучше длинный, чем слишком маленький. Важным является использование для руководства читателем. Добро пожаловать! –