mirror of
https://gitlab.com/animath/si/plateforme.git
synced 2025-06-21 20:38:24 +02:00
Improve Django-admin interface, inlines and filters
Signed-off-by: Emmy D'Anello <emmy.danello@animath.fr>
This commit is contained in:
@ -3,13 +3,45 @@
|
||||
|
||||
from django.contrib import admin
|
||||
from django.contrib.admin import ModelAdmin
|
||||
from django.contrib.auth.admin import UserAdmin
|
||||
from django.contrib.auth.models import User
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from polymorphic.admin import PolymorphicChildModelAdmin, PolymorphicChildModelFilter, PolymorphicParentModelAdmin
|
||||
from polymorphic.admin import PolymorphicChildModelAdmin, PolymorphicChildModelFilter, PolymorphicParentModelAdmin, \
|
||||
PolymorphicInlineSupportMixin, StackedPolymorphicInline
|
||||
|
||||
from .models import CoachRegistration, ParticipantRegistration, Payment, Registration, \
|
||||
StudentRegistration, VolunteerRegistration
|
||||
|
||||
|
||||
class RegistrationInline(StackedPolymorphicInline):
|
||||
class StudentRegistrationInline(StackedPolymorphicInline.Child):
|
||||
model = StudentRegistration
|
||||
autocomplete_fields = ('team',)
|
||||
show_change_link = True
|
||||
|
||||
class CoachRegistrationInline(StackedPolymorphicInline.Child):
|
||||
model = CoachRegistration
|
||||
autocomplete_fields = ('team',)
|
||||
show_change_link = True
|
||||
|
||||
class VolunteerRegistrationInline(StackedPolymorphicInline.Child):
|
||||
model = VolunteerRegistration
|
||||
show_change_link = True
|
||||
|
||||
model = Registration
|
||||
child_inlines = (
|
||||
StudentRegistrationInline,
|
||||
CoachRegistrationInline,
|
||||
VolunteerRegistrationInline,
|
||||
)
|
||||
|
||||
|
||||
class PaymentInline(admin.TabularInline):
|
||||
model = Payment
|
||||
extra = 0
|
||||
autocomplete_fields = ('registrations',)
|
||||
|
||||
|
||||
@admin.register(Registration)
|
||||
class RegistrationAdmin(PolymorphicParentModelAdmin):
|
||||
child_models = (StudentRegistration, CoachRegistration, VolunteerRegistration,)
|
||||
@ -97,12 +129,34 @@ class VolunteerRegistrationAdmin(PolymorphicChildModelAdmin):
|
||||
|
||||
@admin.register(Payment)
|
||||
class PaymentAdmin(ModelAdmin):
|
||||
list_display = ('id', 'concerned_people', 'grouped', 'type', 'valid', )
|
||||
search_fields = ('registrations__user__last_name', 'registrations__user__first_name', 'registrations__user__email',)
|
||||
list_display = ('concerned_people', 'tournament', 'team', 'grouped', 'type', 'amount', 'valid', )
|
||||
search_fields = ('registrations__user__last_name', 'registrations__user__first_name', 'registrations__user__email',
|
||||
'registrations__team__name', 'registrations__team__participation__team__trigram',)
|
||||
list_filter = ('registrations__team__participation__valid', 'type',
|
||||
'grouped', 'valid', 'registrations__polymorphic_ctype',)
|
||||
'grouped', 'valid', 'registrations__team__participation__tournament', 'final',)
|
||||
autocomplete_fields = ('registrations',)
|
||||
actions = ('mark_as_valid', 'mark_as_pending', 'mark_as_invalid',)
|
||||
|
||||
@admin.display(description=_('concerned people'))
|
||||
def concerned_people(self, record: Payment):
|
||||
return ", ".join(f"{reg.user.first_name} {reg.user.last_name}" for reg in record.registrations.all())
|
||||
|
||||
@admin.action(description=_('Mark as valid'))
|
||||
def mark_as_valid(self, request, queryset):
|
||||
queryset.update(valid=True)
|
||||
|
||||
@admin.action(description=_('Mark as pending'))
|
||||
def mark_as_pending(self, request, queryset):
|
||||
queryset.update(valid=None)
|
||||
|
||||
@admin.action(description=_('Mark as invalid'))
|
||||
def mark_as_invalid(self, request, queryset):
|
||||
queryset.update(valid=False)
|
||||
|
||||
|
||||
admin.site.unregister(User)
|
||||
|
||||
|
||||
@admin.register(User)
|
||||
class UserCustomAdmin(PolymorphicInlineSupportMixin, UserAdmin):
|
||||
inlines = [RegistrationInline]
|
||||
|
@ -589,6 +589,8 @@ class Payment(models.Model):
|
||||
@property
|
||||
def team(self):
|
||||
return self.registrations.first().team
|
||||
team.fget.short_description = _("team")
|
||||
team.fget.admin_order_field = 'registrations__team__trigram'
|
||||
|
||||
@property
|
||||
def tournament(self):
|
||||
@ -596,6 +598,8 @@ class Payment(models.Model):
|
||||
from participation.models import Tournament
|
||||
return Tournament.final_tournament()
|
||||
return self.registrations.first().team.participation.tournament
|
||||
tournament.fget.short_description = _("tournament")
|
||||
tournament.fget.admin_order_field = 'registrations__team__participation__tournament'
|
||||
|
||||
def get_checkout_intent(self, none_if_link_disabled=False):
|
||||
if self.checkout_intent_id is None:
|
||||
|
Reference in New Issue
Block a user