mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-13 06:20:16 +02:00
Increase Corpstats Performance
This commit is contained in:
parent
801502ec77
commit
ebff1387c1
@ -29,9 +29,9 @@
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<ul class="nav nav-pills pull-left">
|
||||
<li class="active"><a href="#mains" data-toggle="pill">{% trans 'Mains' %} ({{ corpstats.main_count }})</a></li>
|
||||
<li class="active"><a href="#mains" data-toggle="pill">{% trans 'Mains' %} ({{ total_mains }})</a></li>
|
||||
<li><a href="#members" data-toggle="pill">{% trans 'Members' %} ({{ corpstats.member_count }})</a></li>
|
||||
<li><a href="#unregistered" data-toggle="pill">{% trans 'Unregistered' %} ({{ corpstats.unregistered_member_count }})</a></li>
|
||||
<li><a href="#unregistered" data-toggle="pill">{% trans 'Unregistered' %} ({{ unregistered.count }})</a></li>
|
||||
</ul>
|
||||
<div class="pull-right">
|
||||
{% trans "Last update:" %} {{ corpstats.last_update|naturaltime }}
|
||||
@ -54,14 +54,14 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for main in mains %}
|
||||
{% for id, main in mains.items %}
|
||||
<tr>
|
||||
<td class="text-center" style="vertical-align:middle">
|
||||
<div class="thumbnail"
|
||||
style="border: 0 none; box-shadow: none; background: transparent;">
|
||||
<img src="{{ main.portrait_url_64 }}" class="img-circle">
|
||||
<img src="{{ main.main.portrait_url_64 }}" class="img-circle">
|
||||
<div class="caption text-center">
|
||||
{{ main }}
|
||||
{{ main.main }}
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
@ -119,16 +119,29 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for member in members %}
|
||||
<tr {% if not member.registered %}class="danger"{% endif %}>
|
||||
<tr>
|
||||
<td><img src="{{ member.portrait_url }}" class="img-circle"></td>
|
||||
<td class="text-center">{{ member }}</td>
|
||||
<td class="text-center"><a
|
||||
href="https://zkillboard.com/character/{{ member.character_id }}/"
|
||||
class="label label-danger"
|
||||
target="_blank">{% trans "Killboard" %}</a></td>
|
||||
<td class="text-center">{{ member.character_ownership.user.profile.main_character.character_name }}</td>
|
||||
<td class="text-center">{{ member.character_ownership.user.profile.main_character.corporation_name }}</td>
|
||||
<td class="text-center">{{ member.character_ownership.user.profile.main_character.alliance_name }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% for member in unregistered %}
|
||||
<tr class="danger">
|
||||
<td><img src="{{ member.portrait_url }}" class="img-circle"></td>
|
||||
<td class="text-center">{{ member.character_name }}</td>
|
||||
<td class="text-center"><a
|
||||
href="https://zkillboard.com/character/{{ member.character_id }}/"
|
||||
class="label label-danger"
|
||||
target="_blank">{% trans "Killboard" %}</a></td>
|
||||
<td class="text-center">{{ member.main_character.character_name }}</td>
|
||||
<td class="text-center">{{ member.main_character.corporation_name }}</td>
|
||||
<td class="text-center">{{ member.main_character.alliance_name }}</td>
|
||||
<td class="text-center"></td>
|
||||
<td class="text-center"></td>
|
||||
<td class="text-center"></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
@ -3,14 +3,14 @@ import os
|
||||
from bravado.exception import HTTPError
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.decorators import login_required, permission_required, user_passes_test
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.core.exceptions import PermissionDenied, ObjectDoesNotExist
|
||||
from django.db import IntegrityError
|
||||
from django.shortcuts import render, redirect, get_object_or_404
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from esi.decorators import token_required
|
||||
from allianceauth.eveonline.models import EveCharacter, EveCorporationInfo
|
||||
|
||||
from .models import CorpStats
|
||||
from .models import CorpStats, CorpMember
|
||||
|
||||
SWAGGER_SPEC_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'swagger.json')
|
||||
"""
|
||||
@ -68,7 +68,7 @@ def corpstats_view(request, corp_id=None):
|
||||
corpstats = get_object_or_404(CorpStats, corp=corp)
|
||||
|
||||
# get available models
|
||||
available = CorpStats.objects.visible_to(request.user).order_by('corp__corporation_name')
|
||||
available = CorpStats.objects.visible_to(request.user).order_by('corp__corporation_name').select_related('corp')
|
||||
|
||||
# ensure we can see the requested model
|
||||
if corpstats and corpstats not in available:
|
||||
@ -89,13 +89,49 @@ def corpstats_view(request, corp_id=None):
|
||||
}
|
||||
|
||||
if corpstats:
|
||||
members = corpstats.members.all()
|
||||
mains = corpstats.mains.all()
|
||||
unregistered = corpstats.unregistered_members.all()
|
||||
character_list = CorpMember.objects.filter(corpstats=corpstats)
|
||||
linked_chars = EveCharacter.objects.filter(
|
||||
character_id__in=character_list.values_list('character_id', flat=True))
|
||||
linked_chars = linked_chars | EveCharacter.objects.filter(
|
||||
character_ownership__user__profile__main_character__corporation_id=corpstats.corp.corporation_id)
|
||||
|
||||
linked_chars = linked_chars.select_related('character_ownership',
|
||||
'character_ownership__user__profile__main_character') \
|
||||
.prefetch_related('character_ownership__user__character_ownerships') \
|
||||
.prefetch_related('character_ownership__user__character_ownerships__character')
|
||||
|
||||
members = []
|
||||
mains = {}
|
||||
|
||||
temp_ids = []
|
||||
for char in linked_chars:
|
||||
try:
|
||||
main = char.character_ownership.user.profile.main_character
|
||||
if main is not None:
|
||||
if main.character_id not in mains:
|
||||
mains[main.character_id] = {'main':main, 'alts':[]}
|
||||
|
||||
mains[main.character_id]['alts'].append(char)
|
||||
|
||||
if char.corporation_id == corpstats.corp.corporation_id:
|
||||
members.append(char)
|
||||
|
||||
temp_ids.append(char.character_id)
|
||||
|
||||
except ObjectDoesNotExist:
|
||||
pass
|
||||
|
||||
unregistered = character_list.exclude(character_id__in=temp_ids)
|
||||
|
||||
members = members
|
||||
mains = mains
|
||||
total_mains = len(mains)
|
||||
unregistered = unregistered
|
||||
context.update({
|
||||
'corpstats': corpstats,
|
||||
'members': members,
|
||||
'mains': mains,
|
||||
'total_mains': total_mains,
|
||||
'unregistered': unregistered,
|
||||
})
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user