mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-13 22:40:16 +02:00
Provide simple EVE model creation forms with ID, populate the rest from providers Correct handling of non-main characters in signals
101 lines
3.3 KiB
Python
101 lines
3.3 KiB
Python
from __future__ import unicode_literals
|
|
from django.contrib import admin
|
|
from django import forms
|
|
from django.core.exceptions import ObjectDoesNotExist
|
|
from eveonline.models import EveCharacter
|
|
from eveonline.models import EveAllianceInfo
|
|
from eveonline.models import EveCorporationInfo
|
|
from eveonline.managers import EveManager
|
|
from eveonline.providers import ObjectNotFound
|
|
|
|
|
|
class EveEntityForm(forms.ModelForm):
|
|
id = forms.IntegerField(min_value=1)
|
|
entity_type_name = None # override in subclass
|
|
entity_model_class = None
|
|
|
|
def clean_id(self):
|
|
try:
|
|
assert getattr(EveManager, 'get_%s' % self.entity_type_name)(self.cleaned_data['id'])
|
|
except (AssertionError, ObjectNotFound):
|
|
raise forms.ValidationError('%s with ID %s not found.' % (self.entity_type_name, self.cleaned_data['id']))
|
|
if self.entity_model_class.objects.filter(
|
|
**{'%s_id' % self.entity_type_name: self.cleaned_data['id']}).exists():
|
|
raise forms.ValidationError(
|
|
'%s with ID %s already exists.' % (self.entity_type_name, self.cleaned_data['id']))
|
|
return self.cleaned_data['id']
|
|
|
|
def save(self, commit=True):
|
|
return getattr(EveManager, 'create_%s' % self.entity_type_name)(self.cleaned_data['id'])
|
|
|
|
def save_m2m(self):
|
|
pass
|
|
|
|
|
|
class EveCharacterForm(EveEntityForm):
|
|
entity_model_class = EveCharacter
|
|
entity_type_name = 'character'
|
|
|
|
class Meta:
|
|
fields = ['id']
|
|
model = EveCharacter
|
|
|
|
|
|
class EveCorporationForm(EveEntityForm):
|
|
entity_model_class = EveCorporationInfo
|
|
entity_type_name = 'corporation'
|
|
|
|
class Meta:
|
|
fields = ['id']
|
|
model = EveCorporationInfo
|
|
|
|
|
|
class EveAllianceForm(EveEntityForm):
|
|
entity_model_class = EveAllianceInfo
|
|
entity_type_name = 'alliance'
|
|
|
|
class Meta:
|
|
fields = ['id']
|
|
model = EveAllianceInfo
|
|
|
|
|
|
@admin.register(EveCorporationInfo)
|
|
class EveCorporationInfoAdmin(admin.ModelAdmin):
|
|
def get_form(self, request, obj=None, **kwargs):
|
|
if not obj or not obj.pk:
|
|
return EveCorporationForm
|
|
return super(EveCorporationInfoAdmin, self).get_form(request, obj=obj, **kwargs)
|
|
|
|
|
|
@admin.register(EveAllianceInfo)
|
|
class EveAllianceInfoAdmin(admin.ModelAdmin):
|
|
def get_form(self, request, obj=None, **kwargs):
|
|
if not obj or not obj.pk:
|
|
return EveAllianceForm
|
|
return super(EveAllianceInfoAdmin, self).get_form(request, obj=obj, **kwargs)
|
|
|
|
|
|
@admin.register(EveCharacter)
|
|
class EveCharacterAdmin(admin.ModelAdmin):
|
|
search_fields = ['character_name', 'corporation_name', 'alliance_name', 'character_ownership__user__username']
|
|
list_display = ('character_name', 'corporation_name', 'alliance_name', 'user', 'main_character')
|
|
|
|
@staticmethod
|
|
def user(obj):
|
|
try:
|
|
return obj.character_ownership.user
|
|
except (AttributeError, ObjectDoesNotExist):
|
|
return None
|
|
|
|
@staticmethod
|
|
def main_character(obj):
|
|
try:
|
|
return obj.character_ownership.user.profile.main_character
|
|
except (AttributeError, ObjectDoesNotExist):
|
|
return None
|
|
|
|
def get_form(self, request, obj=None, **kwargs):
|
|
if not obj or not obj.pk:
|
|
return EveCharacterForm
|
|
return super(EveCharacterAdmin, self).get_form(request, obj=obj, **kwargs)
|