Я строю подробные виды на основе моделей и шаблона ниже.
Пока он работает, мне нужно расширить на несколько моделей, и я надеюсь найти метод, в котором я не повторяю один и тот же код в обеих моделях и в шаблоне.
models.py
class Entity(models.Model):
ip_address = models.GenericIPAddressField(unique = True)
hostname = models.CharField(max_length=64, null = True)
geo = models.CharField(max_length=32, null = True)
region = models.CharField(max_length=32, null = True )
city = models.CharField(max_length=32, null = True)
asn = models.CharField(max_length=8, null = True )
date_seen = models.DateTimeField('date seen')
def latest_afp(self):
return self.afp_set.all().order_by('-date_seen')[:1].values()
def latest_rdp(self):
return self.rdp_set.all().order_by('-date_seen')[:1].values()
def latest_http(self):
return self.http_set.all().order_by('-date_seen')[:1].values()
detail.html
{% for r in entity.entityreporttypes_set.all %}
<h5 data-toggle="collapse" data-target="#{{r.short_name}}">{{r.name}} - {{r.short_name}} -></h5>
<div id="{{r.short_name}}" class="collapse">
<table class="table table-sm table-striped table-bordered table-light">
<tbody>
{% if r.short_name == 'Rdp' %}
{% with el=entity.latest_rdp %}
{% include 'rvt/report.html' %}
{% endwith %}
{% endif %}
{% if r.short_name == 'Afp' %}
{% with el=entity.latest_afp %}
{% include 'rvt/report.html' %}
{% endwith %}
{% endif %}
{% if r.short_name == 'Http' %}
{% with el=entity.latest_http %}
{% include 'rvt/report.html' %}
{% endwith %}
{% endif %}
</tbody>
</table>
</div>
{% endfor %}
report.html
{% for fields in el %}
{% for field, value in fields.items %}
<tr><th scope="row">{{field|upper}}</td><td>{{value}}</td></tr>
{% endfor %}
{% endfor %}
Спасибо